1) Familiarity with Unix & shell scripting
2) A scripting language (Python/Ruby/Perl)
3) C
If you have more time, learn C++/Java, and a functional language. From a motivation standpoint, it might be helpful to learn a language with a specific task/project in mind (ie, I want to learn Python to make a webapp that does XYZ).Also, check out http://norvig.com/21-days.html
Out of the 2), I'd pick Ruby. Feels the most newbie-friendly.
C? Hm, yes, maybe. But I doubt you can manage C in 8 months if you never coded before. And for a "startup engineer", it might not be that relevant anyway.
http://en.wikipedia.org/wiki/The_Unix_Programming_Environmen...
It's dated, but it is still one of the best expositions that I, in my limited experience, have seen.
I'm not certain about it as an introductory text to someone entirely new to programming. But it concisely and deeply explains a "philosophy" that is essential to good UNIX work and, I think, to programming in general.
Be careful in your resource selection. There is so much out there. A small fraction of those resources are the real gems. They convey the heart of the matter, and often in fewer pages than other resources that "beat around the bushes", becoming muddled or focusing on detail more than concepts.
Accumulating knowledge through reading and study can provide some sense of the lay of the land. When you encounter a topic, you may recognize it as fitting in "roughly over there". But it is practical work that is really going to motivate and solidify your knowledge. Find some things that interest you, and dig in. Rather than costing you time, they will turn concepts into the experience that brings real comprehension.
I would suggest PHP for "scripting language" since syntax-wise it is similar to C, so if one is learning that, then PHP goes with it nicely. w3c.org has good tutorials on all kinds of web related stuff, HTML, XSL, etc., including a tutorial on PHP. Recommend K&R's "The C Programming Language". That is like my holy book of programming, or would be, were I religious, lol. Plenty of books on shell scripting at the local barnes and noble, but I would focus on general syntax, not specific operating systems, since those come and go.
* Write a game
* Write a text editor
* Write a webapp
* Write an irc server
Just choose something that looks fun, and do it. Start today!You get to understand about UI, data structures etc etc Even if you end up only implementing some pop down menus, it's still worth doing. By that time you may have decided to do something else anyway...
The key is choose anything and start building it.
Learn Scheme and Java. Use SICP for scheme, that will make you think like a programmer. Then you can learn Java using HeadFirst Java.
That way you'll have a "normal" language that a lot of colleges will use, as well as scheme... which is incredibly powerful and functional. Some colleges do tend to use scheme as well.
Where are you heading for college?
I actually tried starting with SICP. I remember looking at the table of contents and wondering why they devoted the entire fifth chapter to cash registers.
Care to explain?
SICP is what I started with for scheme, and what I took away from it was "there is power in wishful thinking." After having read/watched SICP, going into HtDP was more like "Use the design recipe and everything you make will be easy."
I find programming/computer science a little more romantic than that.
Essential reading: http://norvig.com/21-days.html
The bottom line is that you need to work on projects you care about. You need some motivation for what you are doing. Wanting to learn to program is not enough. For example, I have wanted to learn Haskell for a few months. Being a busy college student however means that it's difficult to find time for such an abstract goal. Tangable, realistic projects are the best route to go. I never fully learned or understood C until I was hacking around Linux in my operating systems class last semester. Pick a small project that you want to accomplish, ask for advice about which language would be best, and then have at it.
Another classic.
That's the section on programming. But read the whole thing. The most important part is understanding the philosophy.
You can make 8 months of dedicated learning and practice count for a heck of a lot if you're persistent and tenacious, especially early on. But if you get to college, find that you can already do everything they're teaching at the intro level (possible, depending on you), and get bored, it could impact your studies negatively in several ways.
Go for consistent growth and find things to work on that will hold your interest for long stretches of tme.
You can find the book here: http://mitpress.mit.edu/sicp/
Finish this course and you'll have a better grounding than many of today's professional programmers, and will be able to teach yourself pretty much anything.
Alan Gault Tutorial and book are good http://www.freenetpages.co.uk/hp/alan.gauld/tutcont.htm here is the actual book: http://www.amazon.com/Learn-Program-Using-Python-Self-Starte...
Dive into python is nice as well http://diveintopython.org/
Best way to learn is install python, work through some examples, and then work on a project.
Holden's book is good for a web beginner http://www.amazon.com/Python-Programming-Landmark-Steve-Hold...
I recommend staying away from Microsoft's .NET and other proprietary languages for now; focus instead on more open tools. You'll attain more versatile skills that way.
I learned C by writing a (heads-up limit hold 'em) poker program. I didn't use any libraries other than <stdio> and <stdlib>, so I had to re-invent the wheel in some cases. It ended up being about 1000 lines (not counting comments and excessive whitespace used for clarity), and it was just a text-based interface that could keep track of the state of a poker hand, allow you to make decisions, have the computer player respond semi-randomly, and determine the winner.
I used the Deitel & Deitel textbook, but I didn't do any of the exercises or try to memorize anything. Memorization and exercises are overrated (unless you are going to be tested on the material). It's better to just read a chapter, come up with your own example that uses the concepts explained in the chapter, and refer to the book as necessary.
After I wrote the rudimentary poker program I wanted to make it smarter, so I wrote a tic-tac-toe program that used a recursive minimax algorithm to search the game tree. I ended up losing interest in the original poker program, but have since become a game programmer.
Don't become a "programmer": become a "web programmer", or a "game programmer", or a "compiler writer". Don't learn how to program just for the sake of knowing how to program--instead, learn how to write a specific type of program that you find interesting. You'll be more motivated and will achieve tangible results sooner.
After college in Colorado (love to ski) I worked for 5 years, then got an MBA from Georgetown and joined a pre-IPO venture finance startup specializing in media, communications, publishing, and technology. We IPOed in 2001, I left in 2003, and get into structured finance -- not the kind you read about in the papers these days, but the kind the invests directly in electrical generation and transmission cooperatives.
After a couple years of that I decided to make a huge change: Quit my job, move to Europe, travel, photo (http://sweden06.com), blog, and teach myself some web technologies.
Now, finally, after too much pre-research, I'm starting to tech myself programming (Ruby) so I can build (or at least demo) web apps (in Rails). I know it's a long road and I'm an older guy, but I also believe it's pretty much never too late for anybody, whether he or she is someone with one set of skills deciding to teach themselves another set of skills or even someone severely overweight deciding to take the first step on the long, not easy, path that leads to lower weight and improved health.
Of course, starting down these paths and staying on them and making material progress are two different things, the second part being the most important, IMHO. It’s like the difference between ideas and execution: We all have lots of “great” ideas, many of us the same ideas, it’s the execution that separates.
Ok, sorry this comment got so long, this thread and the communities comments just got me switched on. Cheers from Sweden, Chris
vim
newlisp
jquery
While you're at it: Use Colemak or Dvorak or any other sane layout.
I had a job working as a marketing director, but I got bored, so I quit my job. Then, I started working on www.trailbehind.com in April. Now, I have angel funding and know a lot of javascript, python, and CSS.
There's no book, or method, or realization that will make you a programmer. You just have to start programming something.
Once you have programmed a thousand line system that does something cool you are a programmer. At least that's what my buddy told me.
[Edit]
I also want to support cmos' point that you should try to see the world during this time - youth is far more valuable than money, and the friends you make when you are young are the ones you remember forever. Especially ones made on random travels in random cities/countries.
Once you do that - find a better way to do everything you just did, it's called re factoring.
As other people have stated, don't be afraid to use Google, IRC or even forums.
Python seems to be the language of choice for learning and you can get started by using Google App Engine for free if you don't want to deal with Server Config (but please realize you can't dodge this forever).
If you go the rails route you can use Heroku, it's very good from my understanding. I've only used it briefly.
I'd say it's recommended that you learn how to install MySQL, PHP/Python/Rails on your server. That will give you a big heads up.
Good luck!?
I was very much in your shoes when I finished high school. AT the time I was much more involved in hardware/circuits and had only taken one java class. When I go to college, aside from my CS-based curriculum I tinkered with web development on the side and 4ish years later I'm working at my own startup doing ruby (and still learning). Best of luck!
Could you go into more detail about the problems you had?
Start with simpler languages, start with 3-page (i.e. demo1.html, demo2.html, demo3.html) prototypes.
Probably the best way to decide is to hit the bookstore. Get a list of potential languages, and check out the books available. The one that's the easiest to read & follow, use. Then maybe get another book or two on the same language, to help get past rough spots.
If you're into a framework (e.g. Rails), start with the language first. Do the framework second, unless there's a book that teaches you both.