want to start learning programming where to start

tshontikidis

Limp Gawd
Joined
Dec 6, 2004
Messages
168
So I have been a big comp guy since I was the tender age of 10-11 which was not to long ago.lol So I am leaving for college for a comp sci degree which is a focus in comp programming and math. Well I have decided thats not really the road I am going to take and changing to information systems.(not the best in math and a comp sci degree you get a minor in math). Though I do want to learn some basics of programming, maybe some python, c++, perl and maybe some more scripting languges. nothing to indepth that I will be able to write a massive application(well maybe someday). I am a primarly linux user, with a M$ box for gaming.

so now that you now my mini-life story where do you suggest I start, what langs. maybe some good tutorial books. I will be taking some class in college but most my stuff I learned on my own so why not this.

thanks all
 
just a note to you-

i am not very great at math, either. you don't have to be outstanding in math to take a CS major in college. you learn stuff as you go through, and it really isn't all that difficult.

in high school, i took algebra 2. i got a c, an a and 2 b's. i took geometry... got a's every quarter... took trig, got 2'cs and 2'bs.

in college, i was placed in algebra (which if you are placed in algebra, your math is pretty bad). i got an a. i took calc I. i got a b-. i took calc 2. i got a c, mainly because of some non-calculus problems (a loong list of trig identities to be memorized along with integrals and derivatives). i am currently in calc 3, and it seems pretty easy.

don't sell yourself short. try the courses first.

in fact, despite my mathmatical atrocities, i am taking an extra math course to get my math minor (calculus-based stats)... don't be afraid of it! just respect it!


the reason i say all of this is because info sci and comp sci really are two different programs. info sci is like managing information systems, and that is what you focus on... so you end up missing the upper-level programming courses and must teach yourself... no biggie if you have the time and the ability...

....but the cs major teaches you *fairly* in-depth stuff about computers and programming. if you graduate as CS, you could probably pick the info sci stuff up fairly quickly in comparison to how long it would take you to teach yourself CS.


now.. on topic:

as far as learning the basics of programming and data structures, nothing beats ADA, in my opinion. ada is sytactically friendly and also very friendly to the programmer learning data structres due to the large amount of run-time checking that occurs. Java is good, too... but it isn't as friendly with the syntax.

i would completely avoid c++ until you understand a basic level of computer architecture and assembly programming... c/c++ are very much like programming in assembly, only less tedious. anybody who knows architecture would agree at least somewhat.

in summary, ada has friendly syntax. it also helps the beginning programmer with run-time checks.

java is not as friendly as ada, but provides more detailed run-time checks. it is kind of difficult to learn right away because of it's deeply OOP nature. it can be considered a middle ground between ada and c/c++.. java also has *THE* best documentation of the three langauges.

c++ is a fun language, quick to code in, but difficult to track down mistakes at times. it also lacks certain abilities that the beginner will aprreciate such as string slicing.

all three languages are free. you can find ide's/compilers on the web..
 
It depends what type of programming you want to do.
If you want to get into Object Oriented Programming, look into Java. OOP is very popular
now because it takes away complexity from code, so the program is more maintainable.
If you want to develop web sites look into css / xhtml.
Or...if you want to write small scripts you can look into Perl.

If you are going into information systems you will get exposed to a lot of
database related problems so learning sql is important.
 
nameless_centurian said:
just a note to you-

in high school, i took algebra 2. i got a c, an a and 2 b's. i took geometry... got a's every quarter... took trig, got 2'cs and 2'bs.
well at the college I am attending I would have to take calc 1 & 2. discrete math, statistical thinking and lab, linear algebra. So i am guessing i would need some nohow in math. and really I do not want to get into programming as a career, so info systems would really be a better choice. but i want to learn some basics.

I think I would lean more towards scripting languages the object oriented.
 
I'd start with assembly. Buy a single-board computer kit or microcontroller development kit and write in assembly, strictly.
 
tshontikidis said:
well at the college I am attending I would have to take calc 1 & 2. discrete math, statistical thinking and lab, linear algebra. So i am guessing i would need some nohow in math. and really I do not want to get into programming as a career, so info systems would really be a better choice. but i want to learn some basics.

I think I would lean more towards scripting languages the object oriented.


those math reqs are pretty much every comp sci program at any university. trust me, it's not as bad as it sounds.

as dumb as it sounds, CS majors don't have to program all their lives. however, it is rather handy to know how the things work if you want to work with them.

you sound exactly like i did going into college. trust me, the math isn't that bad once you get in the courses. i even went into college looking for an IS degree, just like you... however, i began to look at the job market (in my area) and realized that CS majors were in more demand at that time.

i talked to a prof about it (who teaches both IS and CS classes). i asked him why this was so.. and he stated bluntly: "IS is for those who can't handle the CS program".. no offense to you IS people who know more about programming than i ever will... i am just quoting the man.

i guess what i am saying is that you have more options later on if you stick with the CS track.... where as info sci pretty much leaves you with databases.... so CS will allow you to make an easy transition to pretty much any field in computers, be it networking or database management, or systems programming.... but IS leaves you stuck with handling information systems.

don't get me wrong, there is a need for good IS people... but you are pretty much locked into IS if you go that route.

back to original topic, i would stay away from the OOP stuff until you halfway master procedural programming. OOP helps a whole bunch when you are in the real world, wanting to reuse old code, etc... it also helps break down the complexity of programming... but it is entirely too confusing to being with while learning to program.

all 3 languages i mentioned support OOP, but i'd stay away from it for a while until you get your feet wet (soaked).

however, i second the notion that sql will be invaluable for you to learn if you are taking the IS route... there is a linux implementation of sql.. it's free.
 
mikeblas said:
I'd start with assembly. Buy a single-board computer kit or microcontroller development kit and write in assembly, strictly.


to the O.P.... honestly, this is the best way to start. it teaches you how computers work, and why they do what they do, making it easier to write high-level code. mikeblas has great experience in this field, and though i am just learning, i have to agree with his advice.

however, if you are going the IS route for 100% certainty, i wouldn't waste the money doing this. learn sql and scripting.


edit: or you could download a microprocessor simulator...
 
nameless_centurian said:
however, if you are going the IS route for 100% certainty, i wouldn't waste the money doing this. learn sql and scripting.
I mentioned what I'd do -- because it's what I did. I started with machine code, in fact, and as a result, I have a great insight into what the machine is doing, and therefore intuitively understand what's a good idea and what's a bad idea, even when using a high-level language. It's also made me extremely flexible; I can write SQL code, or write low-level code.

As such, it's hard for me to think it's a waste of money.

OTOH, everyone learns differently and has different goals; the path you'll chose to meet your education and employment goals is completely up to you. It can be very frustrating starting with assembly, for example, and you might give up because of that. Maybe this can be mitigated by choosing first projects that are realistic (eg, print out some numbers) instead of insurmoutable (make a neat MMPRPG with all sorts of graphics).
 
mikeblas said:
I'd start with assembly. Buy a single-board computer kit or microcontroller development kit and write in assembly, strictly.
where would i go to buy a singlle-board computer kit and what book would suggest for writing code for the board.... or does stuff like that come with the kit.
 
again, you might look into downloading a free emulator for such a setup before you spend the money on it... just so you can learn the ropes.

machine-level programming can be quite the task if you have no clue what you're doing.
 
I've never heard of anyone learning to program with a single board computer kit. Could some one give me a quick rundown on these things?
 
depends... they usually contain a processor and memory and such...

then it's just a matter connecting to the interface and programming it.
 
I used a Synertek SYM-1. Later, I got a Rockwell AIM-65.

A couple of years ago, I was playing with an EZ-80 Acclaim! system from Zilog. They were pushing them at the Embedded Systems Development conference a coule years ago, and had a development contest in Circuit Cellar magazine.

The EZ-80 acclaim! obviously uses a Z-80-based machine langauge, but it also comes with a C compiler. It has libraries for a web server and TCPIP stuff, and the evaluation kit has an Ethernet port, a power supply, a hub, a JTAG debugger, and so on. It really was a bargain at $99.

On a forum where people drop $500 or more on a video card, I can't imagine spending $100 on a single board computer would be a stretch.

Yes, usually a tutorial comes with the board and that'll get you started. For a popular board or chip, you should not have a hard time finding a forum for tips and help, or thinking of neat stuff to do. The EZ-80 is very expandable.

There's college courses taught around modular plug boards, like I used to use with the Bugbook series. I'll see if I can scare up a link...
 
the ez-8 uses a z80 language, would that be assemblyor C? And you were not suggesting those first two, you were just explaining what you did? or were you.

and this maybe a stupid question...but. When you program the board does it just sit on a table all open or do you put it in something to protect the board for the elements.
 
If you're still in grade school, learning ASM for TI series calculators is a good start. I started Z80 ASM back in middle school, and it was a good start for basic logic and such, and you get no pretty IDE either. Just notepad and TASM. Nails the basic concepts that seem to be overlooked these days right on the head.
 
tshontikidis said:
the ez-8 uses a z80 language, would that be assemblyor C? And you were not suggesting those first two, you were just explaining what you did? or were you.

The SYM and AIM aren't manufactured anymore. You can find 'em on eBay sometimes; I sold my AIM a couple of summers ago for about $450, IIRC.

The Z-80 is a processors from a company called Zilog. It was popular after the 8080 and before the 8086. It ran CP/M; you could get an add-in card from Microsoft called the SoftCard for the Apple II that put a Z-80 on the bus and let you run CP/M on the Apple.

Z-80-based processros (like the EZ-80 Acclaim!) have got a home in the embedded systems market, now, though they're certainly not getting top market share.

So the Z-80 is programmed in assembler. If you want, you can use the C compiler they give you, too. I don't know of any other compilers for that specific board, but you can probably find compilers for any language you can name targeting the Z-80 from the CP/M days.

tshontikidis said:
and this maybe a stupid question...but. When you program the board does it just sit on a table all open or do you put it in something to protect the board for the elements.

You can put it in a case, if you like. Most folks don't bother and let the board sit on some rubber stick-on feet at their workstation. The products are designed to be used by engineers to prototype embedded systems, so they're assuming folks who buy them understand and will follow ESD-safe procedures.
 
mikeblas said:
You can put it in a case, if you like. Most folks don't bother and let the board sit on some rubber stick-on feet at their workstation. The products are designed to be used by engineers to prototype embedded systems, so they're assuming folks who buy them understand and will follow ESD-safe procedures.
Grounding wrist band is on and grounded!!! haha sounds like a plan, I think i am going to order one and see how things go. thanks
 
Imo there are much cheaper / easier platforms to learn 'hardcore' programming. You can get Atmel AVR or PIC based development boards for as little as $25-$30., and choose assembly, C or even BASIC as a language. That said, I wouldn't recommend that as a starting point unless you had some previous electronics background (or wanted to learn some electronics at the same time).

I would really look for some online tutorials for java or some scripting language. I think MS has some free limited version of visual studio as well. I think your decision should be based more on what you would like to accomplish.

Gone are the days when your computer came with a built in monitor (not the display device, the assembler / debugger) or some version of Qbasic. Too bad, I think I learned more by having to learn to program in order to do anything at all..
 
agent420 said:
Imo there are much cheaper / easier platforms to learn 'hardcore' programming. You can get Atmel AVR or PIC based development boards for as little as $25-$30., and choose assembly, C or even BASIC as a language. That said, I wouldn't recommend that as a starting point unless you had some previous electronics background (or wanted to learn some electronics at the same time).

I would really look for some online tutorials for java or some scripting language. I think MS has some free limited version of visual studio as well. I think your decision should be based more on what you would like to accomplish.

Gone are the days when your computer came with a built in monitor (not the display device, the assembler / debugger) or some version of Qbasic. Too bad, I think I learned more by having to learn to program in order to do anything at all..
I dont think learning a little about the electronic would be a bad thing and I think it would test me a little more because I am being thrown into a difficult situation. All while learning the logic of programming. and its a cool little project.

could you point out some links for those cheaper boards.
 
tshontikidis said:
could you point out some links for those cheaper boards.
Just surf the http://www.Atmel.com/ website and look for one you like.

The price is higher for the Acclaim! kit because it gives you more than the Atmel kits.

The current issue of Circuit Cellar magazine has a writeup of two or three sample boards from Microchip. You should be able to find the magazine at a good newsstand or bookstore, and you can comapre those, too.
 
Check out the development and training boards over at Futurelec These boards do not come with any type of display, so your intial 'Hello World' type program is usually to just blink some led's. Hoiwever, most of these boards have provision for hooking up text or graphical lcd displays (type lcd in their search box).

I myself program mostly the Atmel AVR controllers. You can do assembler or C to really learn what's going on, but many times I use Bascom Basic Compiler because I can get my project done more quickly (they have a free demo that will program up to 2 or 4K).

An up-n-coming platfor is the ARM chip architecture... there are more ARM based processors in everyday things than Intel has on desks. I may try this ARM7 board for my next project, that is some serious horsepower for the dollar, but for now the best programming platforms are C, like WinARM.

You'll certainly learn a lot by following this route, but it might not have the immediate satsifaction of popping up forms or windows on your pc, or the IT / IS usefulness of a good sql query.

[edit]

AVR Freaks is an excellent resource for AVR based hardware, if you're interested. Out of all the ones I mentioned, I think AVR is the best to get started with (of course I'm biased ;))
 
Completely forgot about the AVR Butterfly... Futurelec doesn't carry them but they're pretty cheap (like $20) and have lcd, led and input buttons for a good 1st jaunt into AVR. Do a Google and I'm certain you'll find a distributer form them.
 
You don't want to be in embedded programming. I don't know why the hell all these people are telling you to get embedded programmers and microcontroller kits.

I have a year and a half left on my ISYS degree from a 5 year program. Where CS majors program in C/C++ and assembly almost solely, I'm more knowledgable in web/scripting languages, database design, and UML modelling. This is a huge advantage if you're going into business/service industry because no one cares if you can make a little light blink to jingle bells on a circuit board. I came in with a prior knowledge of programming though. I do C#/ASP.net at my job and knew C++/Java prior to going to my school.

If you're going into a research role or want to be solely a core app programmer get the CS degree. I went with the ISYS so I'd have a business minor to fall back on... I'm mostly interested in getting into management/security though which as a CS major, you end up a bit SOL until you're a few years deep.
 
i think they are talking about coding machine level to better understand how coding works. You can do more when you know how it works. Also its tuned into a fun project.

As for which path I am going to take, I am going to talk to a counsler and professor at the school.
 
mikeblas said:
I'd start with assembly. Buy a single-board computer kit or microcontroller development kit and write in assembly, strictly.

mikeblas I've been reading your posts on this topic and your idea is interesting and I think it sounds like fun. But is there anything to gain from buying such a kit and writing software for it over just downloading say PCSPIM and running MIPS assembly programs on it?
 
InternationalHat said:
You don't want to be in embedded programming. I don't know why the hell all these people are telling you to get embedded programmers and microcontroller kits.

Maybe, if you politely asked us, we'd explain it to you.
 
I_Need_Money said:
mikeblas I've been reading your posts on this topic and your idea is interesting and I think it sounds like fun. But is there anything to gain from buying such a kit and writing software for it over just downloading say PCSPIM and running MIPS assembly programs on it?
I haven't used the simulators, so I can't comment on that path with the benefit of personal experience.

If someone used a simulator, I guess they'd learn most of the same things and see what's going on inside the machine.

Maybe it's the same end result, but I think there's something to be said for using a tangible machine. If you're programming on a little 10 MHz, 8-bit processor, you quickly get a feel for what a slow algorithm really is. If you're using a simulator on a 3 GHz machine, and that simulator is running 10:1 slower than the host machine, you've still got a lot of horsepower to hide your mistakes.

Certainly, the simulator is cheaper; maybe you download it, and if you don't like the idea you delete it. Hardware is forever.

If you've got a board, it seems like you're more likely to try some electronics projects. You could interface it to a LCD display, or a keyboard, or a robot, or a GPS receiver, or a weather station from SharperImage, or whatever you buy at the local electornics surplus store. I don't think such projects would be practical (if possible) with a simulator.

You also have the opportunity to study the design of the simple machine. Look at an Apple II schematic; it's a train wreck, full of hacks (the good kind). It's got more chips than any modern motherboard, but uses 100,000 times fewer transistors (hopefully, that guess is within an order of magnitude). That schematic can teach you what video memory is, and why dual-port RAM is sweet; about wait states, and about how DMA is implemented. It's not even a bad platform to learn about extendible architectures -- how the slots work.

You should be able to study the schematic for whatever board you're playing on, and learn even more about how a computer is working. You won't get very far with the Acclaim! board, for instance, if you don't understand how a dispaly is multiplexed, or how timer interrupts work. The board is right there, so you can put a logic probe or an oscilloscope on any signal you see and learn how it relates to the rest of the system.

Does the simulator cover this stuff? I think that SPIM just does a processor, and not any other parts of a computer. So I don't think you get such a complete view of the system: timers, I/O ports, memory mapped I/O, and so on, as you would with a real board. Maybe there are other simulators that have it covered.

As an aside: maybe learning "forever" is something that CS students should be doing more of. If an EE fucks up a design, he's spent money on lots of PC boards and rework and so on. If a programmer screws something up, they edit something and try again. I've met very few programmers who are more disciplined than even the sloppiest EEs I know.

<shrug> So, I hope that helps with your question.
 
I want to buy a board as a side project and learn some assembly but I can not seem to find any good online sources. I have found maybe a couple books. mikeblas, do you know of any.

I am finding alot on assembly though, but I should look for 8080 assembly, because that is the arch, correct? or something along the lines of that.
 
if you learn one, you've learn most of them.

some procs have features that others don't, but that's way beyond you right now.

but, if you want to go that route, find a board that uses a 80386, as it is the closest to the x86 architecture of today.
 
tshontikidis said:
I want to buy a board as a side project and learn some assembly but I can not seem to find any good online sources. I have found maybe a couple books. mikeblas, do you know of any.

I'm not sure if you're asking for sources for boards or for books. Several sources for boards have already been listed in this thread: the I gave a link to the EZ-80 Acclaim! at Mouser, where you can buy it, as well as the main Zilog website which has docs for the EZ-80 and their other kits and chips.

I also already mentioned Circuit Cellar magazine and their website, which is a great resource for lots of neat electonics products, including microcontrollers. Nuts and Volts is another such magazine, and Servo is a good magazine for hobby robotics.

agent420 made a post with the AVR boards, including a couple forums for AVR fans. I thought there was also a post about the Strong ARM processors.

You should go to the manufactuer's websites; they offer free downloads and sometimes offer free printed books. They want you to buy and use their parts.

If you search a little, you can find other parts. The 68HC11 is the most popular microcontroller, and a FAQ for it is here.

If it's books you're looking for, search Amazon.com. "
Microcomputers and Microprocessors: The 8080, 8085, and Z-80 Programming, Interfacing, and Troubleshooting" by John Uffenbeck is good for that family, and there's half a dozen good 68HC11 books.
 
Mikeblas, I was asking about the documentation on assembly with z80, which I found a good one Introduction to Z80 Assembler.

I was going to get the Acclaim, but I have been looking at the AVR butterfly and I like the price and it looks like a good place to start. I dont really see what the difference is between the two(well I know that there different archs, but for the purpose of learning to write some machine code). I think I will ponder this somemore....
http://www.worldofspectrum.org/Z80.html
 
if there is a substantial price difference, go with the cheaper one.

i can't emphasize enough: machine programming is not for everybody. i know very little about it, and even i am qualified to tell you that not everyone will enjoy it or keep going in it.

if you get the cheaper one, you'll still learn what the registers are used for, how to store your program in memory so it will be executed von neumann style, etc.

later on, if you're still interested in it, you can always purchase the more expensive one with a small investment of 100 dollars. in this manner, you'll have two microcontrollers... which means you can build something that requires 2 microcontrollers.

warning: this is the best way to learn how a computer works.... but it is a far cry from the database stuff you'll be heavy into on the IS route. if you really like this machine programming, you might want to reconsider your major, changing it to CS.
 
tshontikidis said:
I dont really see what the difference is between the two(well I know that there different archs, but for the purpose of learning to write some machine code).
Well, just look at the features.

The Butterfly has a LCD, which is neat. But you could add one to the Acclaim using any serial LCD you might have lying around, like from a case modding project.

The Butterfly has some I/O lines, which you'd have to learn at least simple electronics to hook up. The Acclaim board has that 5x7 LED matrix, a few discrete LEDs, and three or four pushbuttons which are already wired up and you can play with.

The Butterfly has an ADC, which is neat; the Acclaim board doesn't have that. It does have a place to plug in a modem, a couple serial ports, an external debugger, flash memory, an Ethernet port, and so on. I don't see any of those features on the Butterfly.

The differences are pretty substantial, aren't they? I think the Acclaim board give you a more complete solution.

nameless_centurian said:
but it is a far cry from the database stuff you'll be heavy into on the IS route. if you really like this machine programming, you might want to reconsider your major, changing it to CS.
This has been repeated throughout the thread. Everybody learns differently, but I'll explain that I think that having a low level knowledge of how a computer works fundamentally benefits anyone who wants to do any other kind of programming with comptuers. Gain the knowledge and experience and exposure by doing a few projects over a couple years, and then keep it in your pocket. It'll give any developer (or engineer, or architect, or ...) deeper insight into the machines they use every day.

If you choose a higher-level processor, like an 80386, you have lots of funny things to deal with: protected mode, virtualization, and so on. Some of that is interesting if you do go into serious systems work; otherwise, it's probably not worth learning first time through.
 
I'll be the first to admit, my early code was sloppy, shitty, and inefficient as hell. Capping yourself to a processor like the Motorolla 68k or Z80 really knocks efficient coding style into you. Just because you have a 3Ghz processor doesn't mean you can afford to waste clock cycles because you were too lazy to make code more efficient. Like a lot of other people have said, you can grab a board to learn efficient ASM, and hopefully carry over the style youv'e learned to high level languages.
 
I guess i'll just throw this question in there... what exactly is a scripting language?

I've only ever programmed in C,C++, assembly and VHDL (which isn't a programming language per se)
 
You'll get a lot of different opinions on what exactly a "scripting" language is, but something mundane like JavaScript is a scripting language; you can whip up simple things pretty fast in notepad or whatnot. IIRC, Perl and PHP count as scripting languages, but pretty damn powerful ones (note this forum is PHP :) ). I'd go look at wikipedia for the technical definition.
 
InternationalHat said:
You don't want to be in embedded programming. I don't know why the hell all these people are telling you to get embedded programmers and microcontroller kits.
Hmm... I didn't quite read any of the replies that way; in fact:
agent420 said:
That said, I wouldn't recommend that as a starting point unless you had some previous electronics background (or wanted to learn some electronics at the same time)...

You'll certainly learn a lot by following this route, but it might not have the immediate satsifaction of popping up forms or windows on your pc, or the IT / IS usefulness of a good sql query.
It seems that the recommendations have been made following the interest expressed by the original poster:
tshontikidis said:
I dont think learning a little about the electronic would be a bad thing and I think it would test me a little more because I am being thrown into a difficult situation. All while learning the logic of programming. and its a cool little project.

Based on my own experiences, the knowledge gained from low level programming allowed my to have a better understanding of logic structures and effecient coding in general. While this area may not be for everyone, it is certainly not without it's merits.

[edit]
Man, leave for a day and the forum layout gets all fucked up... What's with that?
 
Gosh, I wish I'd thought to buy one of these to play with the summer before my Assembly class last semester. Don't really see efficency in action on a quad cpu linux server like the one we do our schoolwork on. Might still get one. Sounds fun.
 
agent420 said:
Man, leave for a day and the forum layout gets all fucked up... What's with that?
I think they're switching the layout around to try to accomodate the RHS banner advertisement.
 
mikeblas said:
I think they're switching the layout around to try to accomodate the RHS banner advertisement.
I thought my Internet Exploder got some nasty bug of some sort...

btw - excellent summation you gave earlier about the simulators and such. I agree 100%.
 
Back
Top