Ask HN: How did you get started in hacking/programming?
A second question is: What are some things you wished you knew before you started getting into programming?
I'm just starting, but I guess as a girl who majored in the social sciences, I don't have as many friends interested in computers. A very nice person from the Boston Lisp meet-up tipped me off to Felleisen et al. "How to Design Programs", as well as their paper comparing their text to the standard "Structure and Interpretation of Computer Programs."
90 comments
[ 2.8 ms ] story [ 184 ms ] threadHowever, I was very young when I started programming, so I probably wouldn't have understood those books - partly for intellectual reasons, and mostly because I'm not a native english speaker.
There was another thing that helped me a lot when I was a beginner: I attended a few "advanced computer courses" in some kind of "youth center", where I had the luck to be taught by really engaged computer freaks. They not only taught me knowledge, they also showed to me how much fun that is - even when digging on assembler level.
As for your second question, I wished I had learned about 'structured programming' earlier, that would have saved me a couple of years. But then again, learning it only after a few years of 'spaghetti basic' definitely made me appreciate it more :)
Best of luck, it's going to take you some time but you'll be glad you did it, the ability to program computers isn't going to make you smarter per-se but it will give you an amazing new tool to help with all kinds of other things. The net result is very close to actually being smarter. It's like being able to use a powertool.
Jacques
Needless to say, that's the wrong way to start now.
Other countries used 2.54 mm pitch heart-to-heart for pins on chips whereas eastblock variations on this were supposedly 2.5 mm.
The difference is small, and for packages up to 16 pins you could probably get away with it bending a bit but for a 40 pin package like a 6502 that would not work (or at least, not easily).
If you have access to a machine like that it would be interesting to know for sure!
Interestingly enough, http://en.wikipedia.org/wiki/History_of_computer_hardware_in...
mentions the same rumor, with a reference to a old unavailable edition of Byte magazine.
It would probably take placing another cpu piggy-back on top of the one on the circuit board to clearly see it.
Now I'm really curious :)
The problem, at least as I see it, was that I always just trying to "get my next idea implemented". Granted that's how I learned quite a bit, I think the thing that finally helped me the most was when I decided I wanted to fully commit to programming - and so I sought to learn for the sake of learning. TO consume myself. It was then when I met kohana, and jquery, and frameworks, and ruby, and Hacker News, and MVC, and OOP, and yeah the rest is history - true love.
So my advice. Take it seriously. That doesn't mean it has to be work; consume yourself! You'll be good!
edit: I wish I knew about frameworks and the power of just shutting up and learning from and trusting in people better than me. I love jquery. If people 1000000000 times better than me are working on jquery, it's more than I'll ever be able to do. Have to appreciate that.
Just kidding.
In my early teens (early 90s), I saved and got a C++ compiler, Borland Turbo C++. Digging into real memory with a debugger was so cool. I wish I'd had a Forth to play with, at that age! Later, I dug into Linux, and all the stuff that came with them. For free! (I'd suggest Python as a first language, nowadays.)
A couple things I wish I'd learned earlier:
1) Learning how to work on codebases with other people takes different skills than solitary stuff. Since I started by working alone as a little kid, I didn't really learn consistent variable naming conventions, how to define interfaces between components, etc. until I was in my late teens and digging into open-source stuff. You may not ever learn these things doing projects that are only a couple pages long. (_The Practice of Programming_ by Kernighan and Pike is a short, lucid book that covers this well, IMHO.)
2) Complexity kills projects. Most things don't need to be large systems, and if you structure a system as a group of communicating components, you can get a prototype (rough draft) of the whole system, see design mistakes early, and then cleanly replace the parts that need it. (I don't think conventional OO works that well for this - as Joe Armstrong observed, everything carries along too much context.) Start simple and don't worry about efficiency until you have to. Brainstorm on paper, if that helps.
3) Write programs for something you're interested in, not just another blog engine or what-have-you. The added motivation in making something to make music, cool 3D animations, etc. will keep you going through the hard parts. Your social science background will give you an angle for interesting projects beyond the ken of most CS students.
During that time, I ruun few warez sites and a free hosting company (which was profitable!)
How difficult is it to find Lisp programming jobs in Boston (interested in other cities as well)? Here in Florida, I've been stuck with a choice of Java, C#, or Fortran.
I think these guys would be better suited to answer your question. Neil Van Dyke runs the listserv. I read that a company, ITA, sponsors the monthly Boston Lisp meet-up, and browsing their website, they have projects for Lisp. ITA does travel applications, such as the algorithm for Orbitz's (or was it Travelocity?) low-fare search. As Lisp was developed at MIT, I bet there are more companies familiar with it.
I didn't do much serious programming until I was about 24, the place I worked, a convenience store, just got cash registers with scanners. So we had all this scanning data but no easy way to collate it over time. I wrote a perl script that would parse our scanning data and tell me how much of x we sold for a period of time y. That was when I truly got bit by the programming bug.
My advice would be to have a problem you really need to solve, a goal. The rest is just trying to figure out how to make your language of choice reach that goal for you. It is so much easier to learn how to program when you have a real, tangible, and personal goal, and not some arbitrary exercise put forth by a language tutorial.
Something I wish I knew before getting into programming? Language choice is personal. Find a language whose syntax you enjoy and you can wrap your head around. Don't get caught up in language wars/debates. It's basically meaningless (although fun to argue about). Whatever language you enjoy the most is the one you should be using.
To answer your second question, I wish that I had some insight into software design as I was learning to program. Too often, I would kludge through something in BASIC ... that was the mental model of the software that I retained. It was hard to translate something like that into assembly-language or anything other than BASIC.
I took a course in Pascal which helped to organize my approach to problem decomposition and program design.
If you can really grok SICP you probably won't need anyone to tell you what to read next - depending on your interest you will pick up the right book.
What i wish i knew before i got into programming is essentially the above. It took me a solid 10 years of C,C++,Python,Java and reading the right blogs/journals to realise that my knowledge/understanding was ass-backwards.
As far as the second question goes, I think I'd prefer to be blissfully oblivious. :) That said, I've blackboxed pretty much everything I know outside of Lisp, so I think one of those truths that should be shared with others can be summed up by saying, "Exploration is key. Don't be afraid to take a sledgehammer to the code you're working on. Your future self may end up thanking you for it."
You should email her ask for a retelling of her story..
I didn't really develop a passion for programming until I was out of college and learned Python (and later Ruby). I really wish I had started with one of those languages.
I think this generation's equivalent is probably iPhone.
At a holiday dinner yesterday, a friend's kid (11) wanted to know how to make games for his iPod Touch. The conversation ended at "well, you need to buy a Mac, first."
The costs are pretty high, even by North American standards. My first computing system cost less than $200, I think. Getting started with iPhone development will set one back $1500.
If I had thought I could make lots of money (by teenagers' standards) selling graphing calc apps then I probably would have become a hermit.
The reason? I outsourced dev for my first startup (which I started my Junior year) and it failed miserably. Small fixes took days. Terrible freaking way to start a startup.
Anyways I started with HTML/CSS then moved up to LAMP (yes I know rails is awesome, but hey, I just started coding =)). Since my Senior year, I've personall started and coded two startups, one of which raised angel money and the other which may not need to.