7 ms·
I’m graduating with a CS degree but I don’t feel like I know how to program.
- gte910h 16y agoHonestly, 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.
- jat850 16y ago(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.
- Ixiaus 16y agoGood 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!
- tsoporan 16y agoI'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.
- elbenshira 16y agoWell, 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.
- jgg 16y agoIt'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.
- Locke1689 16y agoOn 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.
- evo_9 16y agoIt 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.
- amichail 16y agoLeaning to program for the first time in college is sort of like learning to read and write for the first time in college.
- btmorex 16y agoI 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?
- j_baker 16y agoThe 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 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.
- deleted 16y ago[deleted]
- hackermom 16y agoYou have no idea how common the reality of CS graduates who just don't know how to program is...
- yan 16y agoAt least this guy is cognizant of his condition...
- noarchy 16y agoI 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.
- snikolov 16y agoA 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.
- acid_bath 16y agoCS 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.
- amichail 16y agoProgramming 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.
- Locke1689 16y agoMost 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.
- edw519 16y agoThe 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.
- Tamerlin 16y agoThat'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.)
- ig1 16y agoLearning what not to do is pretty valuable in itself.
- pyre 16y agoYou 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).
- eli 16y agoReally, 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.
- pyre 16y agoI 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.
- locopati 16y agoYou 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.
- snikolov 16y agoI 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.
- deleted 16y ago[deleted]
- chriseppstein 16y agoJust 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 http://samizdat.mines.edu/howto/HowToBeAProgrammer.html
- daten 16y agoI also like this page for evaluating where you might stack up against other candidates. http://www.indiangeek.net/wp-content/uploads/Programmer%20competency%20matrix.htm http://www.indiangeek.net/wp-content/uploads/Programmer%20co...
- meric 16y agoI rated myself "2" on each category on average... Will I be able to find a job?
- charlesju 16y agoHere 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.)
- motters 16y agoThat'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.
- freshfey 16y agoI 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.
- oct 16y agoThis 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?
- meric 16y agoTo 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.
- jasonlotito 16y agoThe 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.
- deleted 16y ago[deleted]
- joeycfan 16y agoMe too. That's because CS is a narrow branch of applied math. Programming is a totally separate thing. One that the human race is not really good at yet, unfortunately. I code a lot in Ruby and suck less every day.
- abeppu 16y agoNo 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.
- mogston 16y agoYou need to get your hands dirty asap. Start with something small and grow big as fast as you can.