Hacker Newsnew | past | comments | ask | show | jobs | submitlogin
I’m graduating with a CS degree but I don’t feel like I know how to program. (stackoverflow.com)
180 points by SandB0x on May 13, 2010 | hide | past | favorite | 79 comments


The first step in becoming an excellent programmer is realizing that you aren't one already.

Your question shows that you're probably one step ahead of your classmates.

You will always be learning and always be working hard (hopefully). It doesn't really get that much easier, but it does become a lot more fun and rewarding.

You'll be fine. Thanks for the post.


That's excellent advice.

Being weak in algorithms means that the author wouldn't be able to get in the door at amazon (which loves its juniors), but IMO that's a good thing, because I'd never want to work with someone who learned how to develop "production" software at amazon. (It was some of the worst code I'd ever seen -- and I went to amazon after over six years of government contractor work.)


I'm sure I can one up you with the kind of code that goes into a trading system.

I think production code in any realtime environment, whether it be at Amazon or a trading desk at a bank, tends to converge towards crap just because of the time pressure on the developers.


You're probably right. So far in my experience, that's pretty prevalent -- and the industry really does go out of its way to reward failure by rewarding heroics.

I read a bank security audit report once... it made me very concerned about banking in general. It was astonishing how many glaring security blunders these banks were making -- and this was pervasive, neither isolated nor limited to small banks...


Learning what not to do is pretty valuable in itself.


You don't 'learn what not to do' by going to a place with shoddy practices as your first gig... Unless you're bright enough to look at what they are doing and realize that it's shoddy, you'll end up adopting the practices (and have to spend the time to un-learn them).


Really, I think that's the only way to learn some things.

Good documentation and comments always seem like a hassle... until the first time you have to go fix a bug on something you wrote 18 months ago and have no clue how it works.


I think that the best way to learn would be to first go some place that has good practices, then go somewhere shoddy. You'll learn to appreciate the good practices a lot more without having to un-learn bad habits.


In my experience, that's much more common. Everyone at amazon complained about how bad the tools and systems were, and yet continually repeated the mistakes that were to me blindingly obvious.

But they topped it off with extra special levels of stupidity: The vast majority of amazon's software ends up being written by juniors, and when they finally bring in seniors, they put the juniors on new systems and stuck the seniors with the task of adding features to the crap (because seniors are "good at wading into bad code").


No one's brought up special sauce. The trick to getting hired to do interesting software engineering work when you're not a brilliant programmer is to bring more than just programming skills to the table. I didn't start programming seriously until I was in college (TI-89s, LOGO and ActionScript don't really count). And I didn't even major in CS. But I took CS classes, and I learned some Bayesian statistics and some natural language processing and a little machine learning stuff, and I got hired right out of school as a software engineer doing analytics for a company with an information retrieval focus. And I realized that for most of the really interesting problems, just being a good programmer isn't enough. I have coworkers who are more talented programmers than I am. Some of them can code faster, or with fewer bugs or less thought. And I'm grateful to learn from them, and to become a better programmer fostered by an environment with some really good programmers. But the very best projects and problems need some additional creative spark, or mathy trick, or UI magic, or something beyond just the code itself, and sometimes, I get to contribute that something.

So if I was in the OP's shoes (and I almost was, although I wasn't a bad programmer when I left school, just green), yes, learn to program and work on projects on your own. But also learn some stuff that your coworkers aren't likely to know. For me, it was just enough Bayesian stats and applications thereof to have insights that others wouldn't. For someone else, it might be distributed systems, or computer vision, or physical simulations, or information design, or algorithmic game theory, or fancy math, or any corner of the CS or math or statistics literature that has a pratical application but which most programmers don't know. I found that even good programmers won't generally know how to take the KL divergence between two distributions, or write the EM algorithm or put take the MAP estimate of a binomial rate parameter given a beta prior, but there are a lot of software applications for that kind of knowledge. And the world is full of cool problems waiting to be solved by someone who knows how to program, but also knows something else.


(To the author) You probably don't, and that's okay. The most valuable things I took away from my education experiences:

1) You've learned (or should have learned) how to learn new things. Don't stop once the dean hands you your degree.

2) There are probably a lot of people out there who are a lot smarter than you, and that's also okay. Use that knowledge to grow from your working relationships with others and learn more from them too.

Focus less on the individual technologies and more on the other skills learned via extended education.

Caveat: Lots of people don't need to pursue higher education to learn these things, it was just a necessary personal experience for me.

(edit) There's a post on SO by user RussellDias which puts this far more eloquently and fully than I could have.


Good comment here.

I came from the opposite end of the spectrum: started building "websites" with PHP and have grown to be a full fledged programmer in PHP, Python, Erlang, Scheme, and Objective-C. I quickly learned that my creations were sub-par and poorly engineered because of gaps in my knowledge of abstract concepts.

Learning about the Theory of Computation sky rocketed my skills, shoring up my mathematics education has also greatly augmented my understanding of why certain things work and why certain things are a bad idea to do (even though you have the rope to do it!).

Knowledge truly is power, the rest of it you will gain through experience. The OP will quickly learn that he will be above those that did not get through a CS degree because he does understand the minutia of the system and he will be able to understand the engineering process with precision. Rather than "stabbing in the dark" as I see a lot of my peers doing - who did not even bother to at least teach themselves the basics of computational theory, mathematics, &c...

You're on the right track my friend, as many have already said - just start getting some experience. The best route there, IMHO, is by contributing to Open Source Software; nothing taught me more about software engineering than slowly becoming a core developer for an OSS project!


I'm in a similar situation as when you started. I'm coming from a background in web programming and have been wanting to extend my understanding of computers in general and broaden my programming skill-set.

Are there any resources you can recommend in terms of "Theory of Computation"?

Greatly appreciated.


It seems to me that people that really are meant to be programmers already started before college. At least that's been the case with guys I've worked with that actually knew what the hell they were doing.

No offense to this guy but the reality is, if you are not into this stuff before you started college (aka writing your own programs because a) it's cool, and b) you got tired of not having a program that did what you need, etc), then it's a pretty brutal career path.

Think about it this way, most good/great programmers are just coders because it's how they've always been. If you are just getting into this industry because it's a good career path then you have to realize you are going against guys like me who started programming the Atari 800 when I was a kid because, well it was fun and just seemed right.

I wish him luck, but this isn't 1998 any more and companies aren't going to just hire you off the street just because you have a CS degree. The competition level for jobs right now is higher than it's been for a long time. With that said, he can certainly make this work, he just needs to start coding on his own to learn and grow.


Some of the best programmers i've worked with were weird dudes who learned how to program in college.

Starting early doesn't mean you're any good. 4 years of a serious, programming intensive CS degree is better training than 20 years of farting around with PHP.

We don't apply this criteria to other endeavors. I've been playing piano since I was 5 and I'm still not good at it. You're either good or your're not. Sometimes experience helps, sometimes it is a hindrance. Bad habits form early, too.

It's also curious that programmers claim that programming since they were a kid makes them a better programmer, but they also complain whenever a job advertisement requires years of experience.


"4 years of a serious, programming intensive CS degree is better training than 20 years of farting around with PHP."

That's really funny and true.

Yeah, agreed, I know plenty of CS degree holders that are top notch coders as well. But I have to say, I don't think a single one of them hadn't learned a language or two prior to college and I doubt they ever thought for a second 'I'm not sure how to program'.


I thought C was totally terrifying and confusing for the longest time. I started in Visual Basic because it had WSYWIG forms, and I just couldn't imagine how someone would programmatically construct an interface. Feeling like you have no idea where to start is completely legitimate. I eventually faced it, though, and got through it. Of course, I was 11 or 12 at the time, but still.


If you want to know how to programmatically construct an interface, fart around with a Tcl/Tk tutorial for a bit. That's very interactive and easy. It's a good way to get your head around the general idea.

I agree that C can be terrifying and confusing at first. The buggy GCC of the late 1980's/early 90's was not friendly for beginners. One of the class project's bugs disappeared for no reason when we changed the order of function definitions in one file.

It gets easier once you a) learn assembly language and b) write a compiler. Fart around with some CoreWars and Google "NAND to Tetris."


You were unlucky, I went the other way. I did start on basic on my Z80 machine, but since you could only really write adventure games with basic, I moved onto Z80 assembly language. Then, I moved onto x86 assembly language.

Every from that point has been easier, in most ways.

I was lucky, everyone of my friends had a C64, and they were swapping games. We couldn't afford a C64 at AU$399 at the time, so they got me the VZ300 for $99. I had to write my own games. This is how I got into development.

I was one of the few that could program, before I went to Uni. It was around the time that CS was becoming very popular, but hadn't start to differentiate between different sorts of IT, so they offered everything. The classes I found best were hardware, OS, and the half year class were we had to write the same program in 4 different languages.


I think I'm considerably younger than you. The only reason I ever needed assembly was to patch executables without source in my GUI OS; the days of insane resource constraints were already gone.


Hah, that makes two of us! Except iI didn't have the luxury of a Z80, I started on an 8080 that didn't even run CP/M... Ahhh the Compulcolor II, what a fine machine you were. At least you made me learn how a computer works.

I still remember how good it felt when my brother started loading up the games that I wrote rather than the few 'commercial' games that we had for the system.

PS: VZ300??? I thought I knew everything about the Australian 8-bit computer scene, but I managed to miss that one.


The VZ300 was made by Dick Smith, a successor to the VZ200. It had a huge hacker user community, their were program listings and hardware mods in APC magazine. After the VZ line, Dick smith bought out there CAT computer line, which were much more powerful, and more expensive.

Great little machine for $100. Funny thing, the VZ200 had a chiklet keyboard, which are becomming popular again. One of the big selling points of the VZ300 was that it had a proper keyboard.

http://www.old-computers.com/museum/computer.asp?st=1&c=...

To do Assembly language programming I had to get the 16KB upgrade kit, which was this huge piece of hardware that stuck in the back.


I also learned C at that age, but I was excited about it. My motivation was thorough disgust at the limitations of QBasic and VB, which a friend and I had been running into in our more ambitious video game projects.


I feel like having an aptitude for programming at least will incline you to dapple before college.


Actually you guys are probably right. I should clarify that I am in my mid 30s. When I was a kid computers were still mostly for nerds. There was no broadband internet. It was kind of a pain in the ass to program anything other than BASIC. If you wanted to use another language chances are you had to buy the compiler. Thus, it's not 100% unusual that I have peers who didn't program until college. Especially guys from countries where it was really hard and expensive to buy a computer in the 80s.

Now that everyone has had a computer and serious internet since about age 8 it would actually be pretty weird if they hadn't tried programming at all before college.


"Some of the best programmers i've worked with were weird dudes who learned how to program in college.

Agreed - in fact I'd say out of the best programmers I've worked with almost all had CS degree's.

"Starting early doesn't mean you're any good. 4 years of a serious, programming intensive CS degree is better training than 20 years of farting around with PHP."

Never implied 'programming for 20 years' made you better than a person that has a CS degree. I actually meant that all the good programmers I know - CS degree's or otherwise - started before college and did it because they loved it. Same guys that go home and read regular expression books for 'fun' in their spare time.

"We don't apply this criteria to other endeavors. I've been playing piano since I was 5 and I'm still not good at it. You're either good or your're not. Sometimes experience helps, sometimes it is a hindrance. Bad habits form early, too."

True, but again I never said that simply programming for 20 years made you a great coder. I simply meant that someone with this trait, who then pursues a career as a programmer (through a CS degree, or whatever) is going to have a leg up on someone who isn't really into it.

"It's also curious that programmers claim that programming since they were a kid makes them a better programmer, but they also complain whenever a job advertisement requires years of experience."

Not sure what you are talking about here. When I've had to hire a junior it seems like a lot of people with the wrong skills apply for the position, but experience-wise, if you have been programming for 20+ years that's not the issue for me. It's if you have the skills the job I'm looking to fill needs.


"Agreed - in fact I'd say out of the best programmers I've worked with almost all had CS degree's."

It goes to show that there's no correlation between programming skill and degree. Most of the worst programmers I've ever worked with had CS degrees, because they tended to write the most pointlessly complicated code they could. They were invariably the most guilty of premature optimization, and rarely produced code that worked any better than my minimal implementations did -- and of course, no one could ever prove that their implementations actually worked, because they were incomprehensible.


Agreed.

Get a challenging job where people can criticize your work and not a job where you can code and deliver with no feedback (except from users with no programming background).

In software, just because it works, it doesn't mean it is well done.

Also, if you can't note a significant improvement in your skills over the next three years after graduation, you're not going to make it big in this industry.


Way to bust one stereotype by using another (php programmers are bad).


I think the implication that was people who program in just PHP are bad.


I didn't mean to imply anything. One of the best (and richest) programmers I know prefers PHP. I just don't think it's necessarily the case that you become good simply because you started programming when you were 16.

My comment wasn't great because I also didn't mean that having a CS degree makes you good. What makes you good is practice on hard problems, and a certain amount of "je ne sais quoi."


Ah. My bad. (-:


PHP is only 15 years old ;-)


Depends if you have also used other languages, I mainly code in PHP, but also have experience in other languages. I would say though you would develop a stack of bad habits if PHP was first and only language someone used.


I didn't start programming until college (aside from screwing around with my TI-85 when I was bored in class), and it hasn't really set me back at all. If it's something that makes sense to you and you can think algorithmically, you'll do fine no matter when you start.

I often encounter the assumption that all "good" programmers start early in life and/or that all "good" programmers have an innate drive to build things and that's why they got into programming in the first place. (I think the two assumptions are related). And while it's true that many good programmers meet those two criteria (probably the majority), they're not universally true.

There are other reasons to love programming besides just the end result; I myself was drawn to it because I'm fascinated by the intellectual challenge of taming and organizing complexity, and of the way program construction can be seen as a series of rapidly-evaluated scientific hypotheses (i.e. "I think I can do X this way" and a short while later, relative to pretty much any other discipline. you have confirmation or rejection of that hypothesis).

I did, however, leave school with a bit of a complex precisely because I don't fit the traditional grew-up-tinkering-with-computers mold for software engineers. I thought that all those other people must be better than me, or be lightyears ahead of my skillset, or that because I came to the profession differently I must be somehow inferior or have a lower ceiling on my abilities. It took me a couple of years of programming professionally to realize that wasn't the case and to be confident in my abilities.

Anyone with the right set of cognitive skills can do fine in a college CS program regardless of their background, and anyone who has the skills to make it through a college CS program and who enjoys what they're doing will do fine as a professional programmer if they're willing to keep learning, regardless of their prior background. (And I don't mean to imply a CS program is by any means the only way to go, merely that someone with no prior background who goes through such a program will likely be fine.)


The mistake you're making is taking the OP at face value when he says he doesn't feel like he can program. That can actually be a good thing. It could be the Dunning-Kruger effect at work: http://en.wikipedia.org/wiki/Dunning%E2%80%93Kruger_effect

Thus, the OP could say that he doesn't know how to program because he's actually pretty good at programming.


Not to nitpick, but the OP, Wendy, is a she.


The first real line of code I wrote (I'm not counting poorly crafted HTML) was when I was 16, as a senior in high school. And that was Visual Basic. We didn't do C until the second half of the year (and by this point, I was 17). Which right now, means that I've been coding "seriously" for about 4-4.5 years. I'd guess that its not nearly as many years as you have. Which is fine. You're probably older. And you probably started before you were a senior in high school.

But, you know what? That doesn't mean that I'm any worse off in terms of ability (to code, design, learn or understand concepts) than you. And I'm not sorry for not spending my teen years implementing Ukkonen's algorithm or whatever else would count for you. I can read the paper on how it works if I ever need to implement it.

I object to claim that in order to code, you have to have some sort of monkish training. That if you're "like this," then programming is the only path or that you have to be "like this," in order to be a programmer. Your point of view seems like a horribly elitist, closed-minded view to have.


Actually, it probably does mean you're worse off in terms of ability -- but not in terms of potential or aptitude.

5 years ago I used to think I had the coding thing down pretty pat -- now I'm much better than I was then, and I have a lower opinion of my knowledge as well :)


5 years ago I used to think I had the coding thing down pretty pat

I'm not nearly as arrogant as to think that I know everything in my particular domain(s) of interest. I can look at whatever language(s) I consider myself proficient in and name half a dozen things in half as many seconds that I know nothing about.

I simply disagree with the "You have to have coded for years before going to college for coding to be a good coder" line of thought. You have to have the time, yes. But, imho, it doesn't have to come from college and it doesn't matter when you start.


I refuse to even view old code of mine. I'm afraid I'll get a concussion from all the forehead slapping this will induce.


Senior in high school at 16?


Yup. I started my senior year of high school when I was 16. I was 17 when the year ended. Didn't skip a year, just started a year earlier than most people. But, thats another story.

FWIW, I'll be done with undergrad work at college at 21 (assuming I graduate on time next year). Could have finished by this summer (ie: before I turned 21), but, I do enough classwork during the semester, I wanted my summers "off" (read; working/internships instead of classes).


This isn't all that uncommon. The same was true of both my wife and of me; we both have Fall birthdays, and started kindergarten before we turned 5. I turned 18 several months into my freshman year of college.

FWIW, I don't recommend this, but (and I've faced this with my own kids now) there's really not much choice. I was already bored in school; if I'd been back another year, it would've been even worse.


I can tell you from the perspective of someone actively hiring developers, there's a total shortage of great talent. We're nowhere near satisfying all demand for really excellent engineers. Even if your point that she'll never be as good as you are is true (not that I'm supporting that point), it's just silly to say that she's in any danger of being pushed out of the market if she's still very strong.


I've been a geek most of my life, but I hadn't done any programming until college. I love it, and am fully confident that I'm good at it.

But yes, there really should be some drive towards interest in your career path. If not, you'll struggle to improve, and would likely be significantly happier doing a different job.


I have to agree. I probably wouldn't say this in the SO question because I wouldn't necessarily want that person to read it, but:

There's a possibility she's just in the wrong field altogether. Most of the computer science people in my classes knew at least one language fairly well coming in as freshmen. I can't say they were all great programmers, but they did know how to program.

Maybe, if she was a straight A student without much practical experience, or a B student with a lot of practical experience, I would think differently. But she isn't.

That said, there are tons and tons of mediocre - bad programmers that make a career out of it. I'm sure she could as well. I just think maybe there's something out there that she would be really, really good at. Why stick with something that you aren't so good at?


Just to be clear, I'm not the OP on Stack Overflow. Someone could link this to her if they have enough rep to comment.


Leaning to program for the first time in college is sort of like learning to read and write for the first time in college.


Well, what did you except out of a CS (== computer science) degree?

If you want to be a great software developer, then you should (1) major in CS and (2) learn how to program. These are usually two separate but mutually beneficial things.


It's funny, because the situation we're in right now (at least in the US) does neither really well.

On the one hand, hardcore theoretical courses at the average CS school don't exist as weed-out at all. If you're lucky, you've got a good faculty member teaching a compilers or operating systems course that'll make it challenging, but only sometimes. Teaching things like Haskell, The Lambda Calculus, Prolog, Complexity Theory and C are "impractical" for someone doing a CS degree, because, you know, everyone uses "OO" (whatever that means) nowadays so that's the theory we should teach. Plus, if we teach a hard course about the theory of computation, lots of kids will flunk, and we can't have that, now can we?

On the other hand, any attempt to make the curriculum practical (since most schools border on vocational training anyway) is met with the response of "Well, a CS degree shouldn't prepare you to be an industry programmer!"

So really, most universities are left in a luke-warm middle-ground, where theory is being neglected but no one is willing to be the administrator who "flips the switch" and turns CS students into non-stop code monkeys.

Really, grounding yourself in a lot of CS theory, while occasionally forcing yourself to break out and hack up a project, is probably the best route to becoming a well-rounded programmer. Whether most people are capable of realizing how bad current CS education is and doing so, however, is another matter.


Interesting the you mention that some courses will only sometimes be challenging. When I did Algorithms and Data Structures, the assignment was all about applying them to get the fastest execution time on quiet complex set of data that had an inner loop inside each data point to optimise.

Completing it the worse way possible, ie setting up arrays and traversing them linearly would give you an execution time in the hours. It really took experimenting with different versions of most of the structures and algorithms taught to get the best execution result.

This years assignment that my brother is doing, seems that to get the fastest execution given the stuff taught in the class it's just a matter of using one hash table and a couple of numerically indexed lookup arrays. So the people doing it this year will get nowhere near as much out the assignment.


On the one hand, hardcore theoretical courses at the average CS school don't exist as weed-out at all. If you're lucky, you've got a good faculty member teaching a compilers or operating systems course that'll make it challenging, but only sometimes. Teaching things like Haskell, The Lambda Calculus, Prolog, Complexity Theory and C are "impractical" for someone doing a CS degree, because, you know, everyone uses "OO" (whatever that means) nowadays so that's the theory we should teach. Plus, if we teach a hard course about the theory of computation, lots of kids will flunk, and we can't have that, now can we?

Agreed for most schools but I will say that there are good schools that still teach at that level. The Intro to Programming Languages class at Northwestern has you implement an interpreter for a variety of different languages, including a variant of Scheme called Typed PLAI. Haskell was used as an example sometimes and we implemented a number of similar features (basic type checking, currying, etc.). I know that the operating system and compilers courses here are very difficult and have heard similar things about the corresponding classes at CMU.


Agree. I'm about to graduate from CMU, and their OS class was an extremely rewarding experience. I've heard similar things about their compilers class.

The required intro classes are also pretty rigorous, although I didn't take them personally. I'd bet that any CMU CS (note that engineering is a very separate program at CMU) grad would at least somewhat know how to program, and will have programmed in assembly and ML, along with the usual Java and C. Obviously you have to check whether they got C's in the big rigorous classes or not, but it's basically a good bar. It would be impossible to graduate and then fail FizzBuzz, for example, which to my understanding is not true of most CS programs.

The one main complaint I had with it was that the required freshman theory course (251), which is supposed to be this great legendary weed-out thing, was just a hodgepodge of badly specified discrete math, and still is, to my knowledge. It was hard, but in my opinion not in a good way. Maybe it works as a weed-out but not as an educational tool. The later required algorithms course, 451, was much better.


>Agreed for most schools but I will say that there are good schools that still teach at that level. The Intro to Programming Languages class at Northwestern has you implement an interpreter for a variety of different languages, including a variant of Scheme called Typed PLAI.

Very nice!


I'm graduating in a week or two with a BS in Computer Science/Systems. I don't know what schools you have experience with, but my particular school did very well at Computer Science and Software Development. I've taken several courses in data structures, algorithms, hardware, assembly, OS and all the way up the stack. I've also taken a two year rotation working with a team on a project for an outside company.

Consequentially, I have had a job lined up for several months.

All that to say schools that teach both do exists.


>All that to say schools that teach both do exists.

I'm not sure what you're trying to rebuke here. Did I say they didn't?


Here is a major trick to life that most engineers don't realize.

MOST college degrees are essentially useless. There are hundreds of jobs out there that don't require programming or a specific college degree. There is no reason to let your degree pigeon-hole you into a career path.

If you're asking for my advice, I honestly don't feel like you're going to cut it as a programmer. Sorry kid. A true hacker is going to run circles around you and you'll most likely not be able to compete if you aren't competitive after college.

With that being said, LIFE IS NOT OVER. Find a job that you like. Most people respect those that are able to complete a computer science degree and will hire you into a huge array of jobs (financial analysts, consulting, i-banking, technical sales, etc.)


CS isn't a degree that teaches you how to program. For me it was much more like a discrete mathematics degree. I learned probably hundreds of algorithms (compression, cryptography, 3D rendering, AI), how to analyze and create new algorithms, but not how to program (except in the typical CS101 courses).

It was always assumed that any student could learn the language of their choice from an off-the-shelf book. I myself knew about half a dozen languages and mastered a couple before I graduated, but that was all extra-curricular work. In many ways I'd probably be a better developer if I obtained a Software Engineering degree instead, but CS gave me the foundation to tackle the interesting computational problems.

The professors knew they would be much more valuable explaining how RSA worked than how to debug a syntax error or learn the language of the month.


Programming requires a lot more than learning the syntax and semantics of a programming language.

Most CS profs don't teach programming because they don't have anything interesting to say and would rather teach something else. They are not programmers.


Most CS profs don't teach programming because they don't have anything interesting to say and would rather teach something else. They are not programmers.

I feel this is slightly hyperbolic. CS often isn't a productless field, even in academia. While many fields in CS can get away with simply publishing algorithms and other codeless papers there are many subsections where implementation is a vital part of the project. For example, the Xen project was originally an open source academic project.

I think the biggest problem in academia is the tight schedule. Unfortunately, many of the problems you encounter in industry take too long to be properly implemented in the structure of a semester course. For example, long-term maintenance and technical documentation are at the core of any significant software project but by the time most of that stuff would come up the semester is already over.


You don't. No worries there, you're just starting. Find something that inspires you and write code around that (do it in your favorite language or use it as an excuse to learn a language). Do a small project, do many small projects, do projects with friends. Read code - grok some of those libraries you're gluing together. Read about coding (O'Reilly's 'Beautiful...' series is great). If you enjoy programming, it'll come together. Keep the beginners' mind forever.


I think getting your hands dirty with something you are interested in is the key here. Too many classes in "software engineering" deal with contrived examples built around concepts you are "supposed to be learning." More freeform projects allow you to become invested in what you are doing and accelerate your learning.


That's the difference between education and training. Computer science is supposed to teach you the science of computing - it's not supposed to be a training course teaching you job skills. Once you graduate that's only the beginning, not the end, of learning about programming languages.


Honestly, it seems the dude could figure out how to write 75% of a hacker news type site. Honestly I'd say the markup and scaling aren't really needed for basic anything. He might not understand cookies, etc, yet, but still he'd get most of it out there.


Just about everything I've learned since graduating college is summed up in this web page (which I did not write -- but found recently). Enjoy!

http://samizdat.mines.edu/howto/HowToBeAProgrammer.html


I also like this page for evaluating where you might stack up against other candidates.

http://www.indiangeek.net/wp-content/uploads/Programmer%20co...


I rated myself "2" on each category on average... Will I be able to find a job?


I do have a problem which goes into this direction. Although I can code some simple programs, I have no clue how and where to start something bigger, like a social media platform. I don't know what part would be backend and frontend and where I should start first.


This is a good description of my position as well. Unfortunately it seems like this is something that does not get taught at schools much, and I will admit to having been trying to learn everything from school when I should be doing more independent work. Does anyone know any useful resources on how to proceed from this point? Or does it require just working on a larger-scale project and figuring things out along the way?


To understand it all.. Just try starting a project yourself, and learn to google. :) Start with something simple like writing a blog where people can log in and post comments.


The problem is you are looking to program a social media platform. No one writes a social media platform.

Instead, you write a program that let's people enter in what they are doing. You then take what they wrote, and store it someplace. You then write something that display what people stored. Etc.

The thing is, most 'social media platforms' are essentially just a lot of CRUD.


You need to get your hands dirty asap. Start with something small and grow big as fast as you can.


You have no idea how common the reality of CS graduates who just don't know how to program is...


I knew multiple people in my CS program that didn't even own a computer and never did anything computer-related outside of class. It was just a job to them. We could never understand it.

Almost everything I learned about writing code came outside of class, mostly messing around with open-source tools and games.


I see people coming in with 2 year degrees from community colleges, who can outgun 4-year CS graduates. The ones who can pull this off tend to be genuine hackers, who have a passion for what they are doing.


A little perspective from a junior in EECS at MIT who is also concerned about leaving college as a competent software engineer.

In most software jobs, practical experience outweighs theoretical knowledge. I would guess that the people from 2 year degrees spend a lot of their time actually programming, whereas those with the 4 year CS spend a lot of their time learning about computer science.

At MIT and there is really only one software design class you need to take for a CS degree. It is expected that to learn to program you need to do it by hacking around on your own or working at software companies during the summer.

I've found that there is a significant group of CS majors at MIT (myself included) that are more interested in the cool things that can come out of theory (and eventually programming those things) than in programming itself.

I would be bored out of my mind gluing libraries together to write a chat program, for example. While I find the process of designing/building/tinkering with anything exciting and fun, I am simply not that interested in chat programs. I'm not even that interested in computers! To me, the freedom to explore my interests related to computing and computer science, without being pigeonholed into a "standard" computer science curriculum is fantastic.

Hence, I've spent more of my time learning about interesting topics in computer science and math than I've actually spent coding. And I've spent even less time designing software (as opposed to just coding on various simulations/algorithms/mini-projects).

To echo what someone else said, yes, genuine hackers my age will probably code circles around me when it comes to programming. But we're probably not even interested in the same kinds of jobs.

I am not saying software engineering is not important -- it's simply taking me longer to become competent at it (or at least "employable") because I'm trying to combine it with other interests.


You're being generous. There are loads of "senior programmers" who don't know how to program.

In fact I'd guess that the OP knows how to program, but she's not yet a good designer and is aware of it.


At least this guy is cognizant of his condition...




Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: