1050

I'm graduating with a Computer Science degree but I see websites like Stack Overflow and search engines like Google and don't know where I'd even begin to write something like that. During one summer I did have the opportunity to work as a iPhone developer, but I felt like I was mostly gluing together libraries that other people had written with little understanding of the mechanics happening beneath the hood.

I'm trying to improve my knowledge by studying algorithms, but it is a long and painful process. I find algorithms difficult and at the rate I am learning a decade will have passed before I will master the material in the book. Given my current situation, I've spent a month looking for work but my skills (C, Python, Objective-C) are relatively shallow and are not so desirable in the local market, where C#, Java, and web development are much higher in demand. That is not to say that C and Python opportunities do not exist but they tend to demand 3+ years of experience I do not have. My GPA is OK (3.0) but it's not high enough to apply to the large companies like IBM or return for graduate studies.

Basically I'm graduating with a Computer Science degree but I don't feel like I've learned how to program. I thought that joining a company and programming full-time would give me a chance to develop my skills and learn from those more experienced than myself, but I'm struggling to find work and am starting to get really frustrated.

I am going to cast my net wider and look beyond the city I've grown up in, but what have other people in similar situation tried to do? I've worked hard but don't have the confidence to go out on my own and write my own app. (That is, become an indie developer in the iPhone app market.) If nothing turns up I will need to consider upgrading and learning more popular skills or try something marginally related like IT, but given all the effort I've put in that feels like copping out.

Robert Harvey
  • 198,589
  • 55
  • 464
  • 673

130 Answers130

533

Best way to learn to program is to write programs.

Two suggestions :

  • develop a game
  • develop a web site

Algorithms, while useful, and should be understood, actually play second fiddle to software design. TDD / Design Patterns / Architecture / Refactoring / Unit Testing / The process of putting code together / etc tend to be far more important skills.

Also, far better to do this in your own time. Don't wait to work this stuff out on the job. I find the people who tend to do better are the ones who early in their careers put the effort in to develop their skills in their own time. Usually because they are genuinely passionate about software development

  • One more thing is to "Read books and samples" and don't be ashamed to ask. If you want to learn you should ask :)
Keith Nicholas
  • 690
  • 1
  • 6
  • 12
  • 70
    +1 Agreed. And if you don't WANT to do this stuff on your own time, this might not be the best career path for you. If you put stuff together now, you can build a portfolio that can supplement your GPA. – Christopher May 13 '10 at 00:01
  • 68
    @Chris, -1. That's like saying that a lawyer who doesn't do pro bono work for the indigent on his own time is in the wrong career. Many programmers I know would be better off spending less time programming and more time doing almost anything else. –  May 13 '10 at 00:13
  • 21
    actually a lot of lawyers when cutting their teeth, get paid badly and put in a lot of extra hours just to get ahead. –  May 13 '10 at 00:27
  • 22
    You cannot really compare a lawyer job with a programmers job. With programming you can acquire skill on your own; you don't need any employer or clients to improve that part. –  May 13 '10 at 03:02
  • 31
    Really, you need to stop thinking programming is special. Lawyers can work/learn on their own just like we can. They may start off on poor-paying jobs and work long hours, but so do many programmers... the "if you don't program as a hobby you shouldn't be a programmer" line is really very subjective. –  May 13 '10 at 09:07
  • 3
    @David M: There's two questions here: should you be programming while unemployed (ideally, yes), and should you be programming on your own time while holding down a full-time programming job? – David Thornley May 13 '10 at 13:32
  • 3
    *sigh*. We've seen the "you must love programming away from the job, or you're not a 'real' programmer" argument many times, and there's no resolution to it. I think it's safe to say that if you like programming in your spare time, because you're so enthusiastic about it, that enthusiasm will take you far. Beyond that, I wouldn't read much into it. –  May 13 '10 at 20:17
  • I love SQL to death, and it's mainly my job, but I don't go near it outside of work unless it's stackoverflow and that's pushing it. I love fireworks outside of work but wouldn't dare mix those two. :D. I have learned though, that the more you're involved the better you tend to understand it (but this is not always the case, look at tensor analysis... UGH!). so, yeah, program, something you like, and something you had troubles with in school. +1 for the game example too. That's what really helped me get good at embedded programming. –  May 13 '10 at 22:52
  • Writing algorithms isn't a bad idea. I like coding contests both for Apps and Algorithms. They force me to use what I've learned. –  May 14 '10 at 02:19
  • 11
    I'm a programmer, but I don't write any code at home. 7-8 hours a day is enough for me - too much of anything will bore me after a while! –  May 14 '10 at 07:52
  • 1
    I totally agree with TabbyCool. Before I got my current job, I was doing personal projects all the time. But now I have a project graveyard in my Visual Studio folder that I'd rather not think about when I get home from a hard day's work of coding. –  May 14 '10 at 08:11
  • I would add, don't be too ambitious, especially on your first project. For instance, if you build a web app, build something incredibly simple such as a blog with extremely basic functionality, then put it on the web. Then add features to it releasing them as you go. It's far more rewarding that way, you get more regular feedback and a feeling of achievement. You don't get depressed/despondent that your overly ambitious project is taking too long, leading to you eventually giving up. – Sunday Ironfoot May 14 '10 at 13:23
  • In addition to a game or web site, develop a utility library, using good API and O-O design techniques and good documentation. – David R Tribble May 14 '10 at 14:15
  • Not only that, but web development gives you something to show off to non-techies. I know it's the wrong way to look at it, but having that tangible thing to quickly glance at and say "Wow, I really do have talents that most people don't have" helps me out a lot. –  May 16 '10 at 14:21
  • +1 for games. I didn't learn to program until I had to make a game myself. Design patterns, language idioms, source control, exception handling -- I didn't use any of these (or know how to use them) until I started making my own game. –  May 16 '10 at 21:05
  • i'm a programmer and i don't go home and write code. but this is only bcause i have a job where i spend 8 hours a day writing code. if i didn't spend this time every day writing code i might have other ideas about how to spend my free time –  May 17 '10 at 09:20
  • +1 for dont be afraid to ask. Too many people are afraid they will look silly if they ask a question, but asking a question - whether it be a technical question or something about career progression (as in this question) - is an invaluable way to learn. –  May 18 '10 at 11:43
  • I started making a game in Java, that was all I knew. I decided to try and remake Theme Hospital in Java from scratch at the end of my first year. I learnt more Java that summer and the following year than I did from Uni. Continuously thinking, "there must be a better way to do x or y", and there was, and I often used Stack to find the answers :) Do your own projects, have fun, and get stuck in! – Relequestual Jun 22 '10 at 17:29
  • One more addition to those still in university: participate in programming contests - you don't need to be the best to do this and you will learn a lot if you take it seriously. – Dennis Jul 13 '10 at 18:03
  • You don't /need/ to program as a hobby to be a programmer. But don't expect to be a better programmer than the guys who do it at home too. –  Jul 15 '10 at 18:21
  • Interesting topic: http://gamedev.stackexchange.com/q/5538/2555 – Martijn Courteaux Dec 20 '10 at 11:17
  • This really isn't said enough. If you want to get better or learn to program you must program. That might seem odd, but think of all the things in life that require practice. In general, a CS degree focuses a lot on the math behind computing and a lesser degree the engineering. This only gives you an excellent foundation for applying the science, which is programming. – dcolish Feb 04 '11 at 21:43
388

I felt like I was mostly gluing together libraries that other people had written

While I understand why you feel like this wasn't "real programming", the truth is that integration work makes up a significant percentage of the typical workload for a corporate programmer. Your experience might be a little more valuable than you think :)

dbyrne
  • 1,378
  • 1
  • 11
  • 15
  • 126
    +1 for glue. Nobody would hire a group of professionals to build a new home and expect them to invent brand new techniques in home building in the process. In fact, anyone interested in managing risk and budget would probably prefer they _not_ do that. – Dan Bryant May 13 '10 at 00:31
  • Depends on your goals. People who work on compilers are in the business of inventing tools for example. –  May 13 '10 at 01:36
  • 1
    @R0MANARMY, there's definitely always room for innovation and improvement. The key, in my mind, is never to forget the goal that these innovations are meant to further: a happy customer. There's merit in novel accomplishment and there is also merit in the skillful integration of the supposedly mundane. – Dan Bryant May 13 '10 at 02:10
  • 14
    I agree there are some edge cases out there but I would say that 75-80% of the programming jobs out there are the kind where you are just gluing libraries together. –  May 13 '10 at 13:18
  • 15
    And there is *nothing* wrong with just glueing together libraries. That is what makes you productive! –  May 13 '10 at 16:24
  • 1
    Any integration work is an opportunity to learn more about what your are gluing together. If you can learn the why, not just the how, it can put you a step ahead. Become the person on the team who understands the library, then you can become the person who extends it or creates something really new with it. –  May 13 '10 at 19:18
  • 10
    Definitely like 90% of my work is either hooking up other people's code (libraries or legacy code) or maintaining older code. But I spend my extra time learning bits and pieces as I go, so that now I do know how a lot of those libraries work, and have a much deeper understanding of what goes on under the hood in general. Be a lifetime learner, and you'll pick it all up eventually. – CodexArcanum May 13 '10 at 20:07
  • 1
    echoing the comments of others, you spend a fair amount of time gluing together libraries because no one pays you to solve the pristine, simplified problems you train on in school. That training helps though, often in ways that are hard to predict. Like any other mature discipline there's a large body of existing work that you leverage to produce results. –  May 14 '10 at 04:46
  • 53
    When I'm not gluing together libraries, I'm usually making libraries that I will later glue together. –  May 14 '10 at 13:41
  • This is actually the benefit of *software reuse* we keep hearing so much about. – David R Tribble May 14 '10 at 14:16
  • 1
    Almost all of my 'real programming' jobs have had 'analyst' or 'engineer' in the title (a few had 'programmer/analyst'), but the point is -- knowing the libraries so you can identify what's already been solved so you're not coding from scratch every time. I want to scream every time I see a question of the form 'how do I do X without using Y_library?' without a good explanation of why Y_library isn't a valid solution. –  May 15 '10 at 03:07
  • 1
    @Joe maybe they just want to know how it works? – TM. May 18 '10 at 13:28
  • A lot of programming is knowing how to find and evaluate libraries to address commonly-encountered problems. e.g., if you're writing an XML parser from scratch, you're probably just redoing work that someone else has already done better. –  May 29 '10 at 00:19
  • gluing libraries up is not a bad thing, however you should have a passion that always want to find out how the fundamental works. –  Jun 29 '10 at 03:28
  • Reusage is most important principle in programming. The ability to find code that does something is even more important that ability to write it yourself. –  Jan 26 '11 at 08:51
  • After you've (re-, re-, re- )implemented (and re-, re-, re-debugged!) a linked list or a dynamically sized array or a hash table dictionary in C / C++ for the umpteenth time, you will cream your jeans when you discover the STL and Boost. I've never (re-) implemented (and re-debugged) a basic container since coming up to speed on the STL. Using libraries as your "primitives", as opposed to just raw code, brings your game up to a whole new higher level, just like using a HLL does over using assembly language. –  Jan 27 '11 at 05:42
  • _“If I have seen a little further it is by standing on the shoulders of Giants”_ (Isaac Newton). There's nothing wrong with leveraging the work done by hundreds of others before, especially when it makes the whole thing go forward. – Lloeki Feb 04 '11 at 13:55
  • +1 for the comment. But that said, there are a lot of alpha-programmers/leads/managers out there who insist on home brew solutions. So who knows, maybe you *have* to write everything from scratch, which might not be the best thing either because of timelines and parallel work. – iyerrag Feb 04 '11 at 19:54
237

First, thank you for an immensely honest question. There are a number of ways to tackle the issues at hand. Here are a few tips, which I considered very helpful for me in the past and still continue to use them to broaden my knowledge.

  1. Learn, Learn and Learn some more. This is probably the single most important tip I can give you. Never stop learning. Knowing one language is good, knowing multiple is even better. Having knowledge of other languages will make you a better programmer and will make it easier to tackle certain tasks and will help you gain a better knowledge of common data structures.

  2. Start small.

  3. Start a hobby project in your spare time. Don't do something you can accomplish fairly easily. Take on a project wherein you have no idea where to begin. Throw yourself in the deep end. The benefits of this is that you will learn things you never knew existed and when you do complete it, you will feel an immense pride and satisfaction. This is what keeps me going.

  4. Have a genuine passion for what you do. Although people will disagree with me on this one. I do not believe you can excel in this field if you simply consider it a 9-5 job. There has to be a passion to do it.

  5. Help out other people on SO! The best way to understand is to try to teach it to other people.

  6. Study other peoples programs and try to figure out how they work, then implement similar techniques in your own programs. Try to read it and get a understanding of it, then do it yourself based of that understanding, rather than copy and paste.

  7. Keep at it. Things can get very frustrating at times, but very rewarding when finished. If you do not understand something, take a break, clear your thoughts and try again. Ask us at SO! We are a willing bunch :)

  8. Never stop learning new technologies.

  9. Read some books. I understand being a student, you would have done a tonne of reading. Here are a couple of practical books that you might find handy… hopefully -- The Pragmatic Programmer: From Journeyman to Master -- Code Complete: A Practical Handbook of Software Construction

Joey Adams
  • 5,535
  • 3
  • 30
  • 34
Russell Dias
  • 181
  • 1
  • 1
  • 3
  • 13
    Add Clean Code to your to-read lists, it's pretty good. –  May 13 '10 at 23:56
  • 7
    "Knowing one language is good" -> wrong. Knowing one language is *not* enough. Knowing multiple languages is good, learning even more languages is even better. – Denilson Sá Maia May 14 '10 at 19:20
  • 10
    "Start Small" refers not only to selecting approachable projects, but starting to implement workable portions within a project. A project of mine started with a little experiment in parallax, and me thinking "that looks like a pretty cool star field for a background of a game". Add a ship... add an alien... add a few missiles, keyboard control and collision detection (each simple problems, by themselves) one at a time and soon, I had a commercial game I sold for (what I thought at the time) a good bit of cash. On the other hand "write a game" is a vague, unapproachable task. One bit at a time. – mmc May 14 '10 at 23:06
  • 2
    @Denilson OP has stated that she does not feel she knows how to program. Knowing one language for someone who is unsure about programming is good. My list is only applicable to this context. –  May 15 '10 at 00:51
  • 7
    @Denilson, could _you_ have learnt multiple languages without learning one language first? – Péter Török May 15 '10 at 19:42
  • I would also advice B. Meyer's "Object-oriented software construction" and related books. – Lavir the Whiolet Oct 28 '10 at 06:20
  • I disagree with the comment on knowing one or more languages. Although it cannot hurt to know more than one language, it is not what makes a good programmer. Know logic and how to analyze goes beyond knowing a programming language, once you master these you can apply it to any programming language. –  Feb 04 '11 at 14:21
  • @mrjohn, each language you learn opens up a new way of thinking. If you're a hammer then everything looks like a nail; if you're an OOP programmer than you'll solve all problems using OOP, even if a more elegant solution exists in another paradigm. – Gareth Davidson Feb 04 '11 at 18:56
  • I would also suggest 'The Mythical Man Month' by Fred Brooks. It's more about project management than actual programming, but it will give you an idea of the various constraints facing any project you get involved in. – BrianV Feb 04 '11 at 19:21
  • http://stackoverflow.com/questions/1711/what-is-the-single-most-influential-book-every-programmer-should-read this may be a great list – onemach Jan 18 '12 at 13:20
141

Start a personal project. The trouble with school is that the most complicated thing you did there was a project that took 15 weeks to a year and involved a couple other people. The problem domain was well-understood (your professor didn't give you any tasks that didn't fit neatly into your semester.) This is not a luxury the real world affords.

If you have to do something major, start-to-finish, that you can be passionate about, your brain will start to wrap around the process. As long as this is just a career and you don't have a love for it, you'll still feel like you haven't made it yet.

Sniggerfardimungus
  • 321
  • 1
  • 2
  • 4
  • I've been dividing my days between 1) sending resumes 2) reading books but it seems like 2) could be better spent writing code. I think a lot employers do not want to take the risk of hiring someone with very little industry experience so that internship I didn't take looks really appealing right now. –  May 13 '10 at 00:28
  • 5
    +1. I concur completely. Start a small app, and then add functionality as you see you want it. As the building goes on, and you start to realize what more can be done, you can add it in. –  May 13 '10 at 00:31
  • 11
    "The problem domain was well-understood (your professor didn't give you any tasks that didn't fit neatly into your semester.)" This is one of the biggest problems with computer science education. There are a few CS or software engineering programs that address this problem, but most don't make you think outside the box. You really need to take on your own projects. If you don't know how Stackoverflow was built, try making a clone yourself. You'll learn far more than any class can teach you. – Matt Olenik May 13 '10 at 02:18
  • excellent idea. But start with something small with core functions and slowly add to it. It will be more motivating this way than trying to get one giant perfect app. I also think that you will never find as much information and tutorials as the wealth of information in books – Xster May 14 '10 at 17:24
  • @Xster, that's what I mean. The task of writing a "question and answer" application that has very basic functionality is a good place to start. – Matt Olenik May 16 '10 at 00:58
  • Personal projects are definitely the way to go. You learn the most when you are responsible for every aspect of the project, including the specification and 'marketing' (telling others about the project). If I could give one piece of advice to new undergraduate cs students, it would be to start a long-term software project, and work on it for a minimum of three hours per week. –  Feb 04 '11 at 14:57
  • Try writing a little one-trick-pony app or script to solve a simple problem and let people download it. I learned a lot about programming from the first application I released, and had to do bug fixes on. – Michael Shopsin Sep 16 '11 at 19:06
106
  1. Start on one of those in-demand languages,using a project as K. Nicholas says.
  2. Don't measure yourself by StackOverflow. That will discourage you unnecessarily.
Smandoli
  • 181
  • 1
  • 1
  • 4
  • 81
    +1 for *#2* - don't compare yourself and the knowledge of a crowd. – g.f May 13 '10 at 00:11
  • 8
    StakOverflow itself is a virtuoso product. Not to mention, there are people contributing with many decades of experience in a huge variety of products. –  May 13 '10 at 00:17
  • 6
    I wouldn't consider it a bad thing to measure yourself against StackOverflow, there are a lot of smart people here. Some are smarter than you will ever be. However those are the people that make you want to keep learning. –  May 13 '10 at 00:20
  • 15
    Hey, I know why I'm addicted to SO! It's terrific for a dozen reasons. But it's humbling to be continually exposed to all the things you don't know. One has to be a bit careful not to feel daunted, that's all. –  May 13 '10 at 01:23
  • @Georg -- Nice game-of-go gravitar. KGS Smandoli –  May 14 '10 at 15:10
  • yeah good call, SO gives the impression that all coders are geniuses - definately not the case. – Anonymous Type Aug 25 '10 at 04:06
72

I can't help with your job situation, but I hope I can help you develop your skills and also put your feelings about your own skills into perspective.

I'm graduating with a Computer Science degree but I don't feel like I know how to program.

It's possible that your instructors have something to be ashamed of. It's also possible that your feeling about not knowing how to program are natural and appropriate to this stage of your life and education. Here are some ideas that may help:

  • Many employers don't care what courses are on your transcript or even what your GPA is. Instead they want to know what you can do, and especially what have you built. For a good job, what you have built is more important than the technology (C, C#, what have you) on your resume.

  • If you didn't get the chance to build a number of interesting projects during your education, shame on your instructors. But you can build those projects now. Scour web sites for interesting problems. Our second-semester students are just finishing "Song Search"—we pulled a huge amount of lyrics for a web site, they build an inverted index, you feed it keywords and it shows you lyrics that contain those words, in context. It's not Google but it's made on the same principles with similar data structures, and you can start building it now.

I've worked hard but don't have the confidence to go out on my own and write my app.

Maybe you haven't worked hard on the right kinds of problems? It's good to find problems that

  • Are open-ended
  • Have more than one good solution
  • Have plenty of bad solutions

If you tackle these sorts of problems, you learn to make choices, to live with the consequences, and if things don't work, to go back and revisit your choices. You'll learn more from your failures than from your successes, but you'll gain more confidence from your successes than your failures.

Good problems—with properties like the ones I list above—are like gold, except that if you get a good problem from somebody else, they don't lose anything. Scour the web for good problems, and practice, practice, practice. If the Euler problems are where you have to start, well they are OK for beginners. But soon you will want to build small or medium-size projects that you think are really cool. If you are excited about something you've built, that will impress potential employers. If you are not excited, it's hard to hire you.

Peter Norvig reports that it takes ten years to become an expert. Of course you don't feel like an expert right after getting your degree. I will let you in on a little secret: Most members of the Harvard faculty (I was one for eight years) feel like they don't really belong at Harvard, they don't know enough, and it must have been some mistake that they were hired. These kinds of feeling are very, very common for people making the transition from school to the workplace, or from one kind of job to another. So common there's a name for it: "the impostor syndrome."

Even though you have your degree, your university will still talk to you. If you had any really good professors, they probably still care about you. They certainly care that one of their students has graduated with a B average and yet feels she hasn't mastered the basic skills of her trade. So seek out one or two of the most energetic, most sympathetic professors from your program, and get some help finding good problems. Then put yourself in charge of your skills, your knowledge, and your feelings about them. Build a little somethingi every day, and don't waste any of your precious building time on anything that isn't really cool. Eventually, I promise, you will recapture a sense of excitement about programming, and following that, you will be able to build confidence in yourself as well.

Norman Ramsey
  • 2,651
  • 1
  • 19
  • 15
  • I have to agree. Go out there and prove to your prospective employers that you KNOW C, Python, Objective-C and build an independent application that does something. People often choose games because depending on the game, they can involve challenging design and implementation, and a lot of the libraries around are free. If you make a game for Windows, GDI/+ or DirectX are all free libs for you to use, etc. – DeadMG May 13 '10 at 02:03
  • The part "Most members of the Harvard faculty (I was one for eight years) feel like they don't really belong at Harvard, they don't know enough, and it must have been some mistake that they were hired. " reminded me of Dunning–Kruger effect =) –  May 13 '10 at 17:04
  • 2
    +1 to build something: it sets you apart from the crowd, especially if it is something that is useful. –  May 14 '10 at 09:23
  • The rest of the answer is great, but sadly this statement isn't true for the majority of jobs out there: For a good job, what you have built is more important than the technology (C, C#, what have you) on your resume. (though upon further reflection, it could be that the majority of jobs out there are crappy ones :( ) –  May 14 '10 at 17:15
  • @Alex: There sure are a lot of crappy jobs out there. I'm lucky in that most of the students I teach get to interview for good ones (although they don't always get offers). – Norman Ramsey May 15 '10 at 00:07
  • Sounds like the students are luckier :) I'm curious as to how the good ones pull it off - do they have more technically minded people reviewing resumes instead of HR people scanning for keywords? –  May 16 '10 at 23:09
  • 5
    @Alex, never go through HR. If you're lucky, someone you know knows someone where you want to work. – Norman Ramsey May 17 '10 at 04:14
  • 1
    You know, now that you mention it that is the way I've typically found jobs. I guess maybe in the future I should focus more on jobs within (or on the fringes of) my network and spare myself the indignity of the keyword scanners. –  May 17 '10 at 12:53
59

Have you looked at ProjectEuler? I taught myself Python by doing the problems on that site. :] If you're after learning Java or C#, you can try that out. Also, I recommend trying your hands on GUI programming as well.

Edit:

Here's a great topic on SO for many links you can look into for coding practice:

https://stackoverflow.com/questions/662283/websites-like-projecteuler-net

  • 4
    I've heard a lot about the site but never had time to attempt the problems, but nowadays it seems like the only thing I have is free time so I might as well keep busy. –  May 13 '10 at 00:13
  • 44
    Project Euler is of very little use to a novice programmer wanting to build programming knowledge. It's oriented towards figuring out how to solve math problems by coding algorithms. You can do a million of those without becoming a good programmer (you'll probably become a great mathematician though). Writing great algorithms isn't a high priority for most programming work. –  May 13 '10 at 16:03
  • 1
    I would disagree Charles - Euler will provide motivation to understand certain concepts and execute upon them. – Broam May 13 '10 at 20:30
  • Using it as Xavier Ho did seems interesting and useful. That is, making yourself master the basics of a new language. I suspect that PE will help you with either programming (on the tiny scale) OR math; so you can plunge in either way. These points aside, I agree with Charles. –  May 13 '10 at 20:33
  • @Charles: Yes, PE doesn't cover everything. It doesn't allow you to practice class design. It doesn't provide ways of doing generic programming. It doesn't tell you how to provide clean code. Every application is different, and the only reason I suggested PE is because Wendy mentioned she may want to learn a new programming language. If you already have some background in mathematics, PE is perfect for such a goal. –  May 13 '10 at 21:30
  • 6
    http://www.pythonchallenge.com/ is key! While Euler are math problems to be solved by programming, pythonchallenge are pure programming problems – Xster May 14 '10 at 17:26
  • @Xster: nice one. –  May 14 '10 at 23:32
  • +1 for project Euler - have to disagree with Charles, maths + programming is a lethal combination, you'll always benefit from it. it indirectly improves your brains logic gates ;) – Anonymous Type Aug 25 '10 at 04:08
  • I ahve been spending some time on Proj Euler myself. The key is not to solve the problems by brute force, rather to keep trying to cut down on processing times. try things you haven't before. Try running multiple threads etc. Knowledge of multi-threaded applications and coding can be very useful. – Ayush Nov 19 '10 at 17:04
59

There was a scene on an old Law & Order in which a DA complains that she learned nothing about how to do her job at law school, that she didn't learn anything about the real world. The professor to whom she's complaining replies, "It's a law school, not a lawyer school."

The same applies to computer science. Perhaps you didn't learn how to contribute immediately to some project you see online, but you probably developed the foundation you need to be successful in the long run.

First, get a job, any job. Become self-sufficient. Particularly in the current economy, I would never fault any candidate for working at a bookstore or whatever while they look for more appropriate employment. I do have questions for people who sit around doing nothing.

Find a project, any project. There are many applicable projects on github.com for instance.

The good news is that a lot sooner than you think, no one will care where you went to school, what your GPA was, or anything like that.

Hang in there! It can be tough going, but you'll be glad of the experience one day.

David M
  • 279
  • 2
  • 6
  • 8
    We recently have a discussion at job about this. Do you really think getting an unrelated job to your career is going to help your cv at all? If you need to pick up fruit for financial reasons, fine but I don't think it has a place in your cv if you are trying to build a career as a programmer. If you don't have financial constraints better to participate in a project without economic compensation or trying to set up your own business. Participating in open source projects or something related to the field, even as a field technician is much better in my opinion. –  May 14 '10 at 08:23
  • 1
    @piotr - You said it yourself - "If you don't have any financial constraints." Any recent college graduate is going to have this problem unless they live with mom and dad. I agree with David M - if you can't find a job directly in your field, get some job. Show that you don't just sit around. Then, when you aren't working at your day job, continue learning at night and understanding your field through projects, etc. Of course, be calling and sending out resumes as well. –  May 14 '10 at 15:50
  • Any job looks better on a resume then a gap does. – Jim C May 14 '10 at 20:28
  • At the beginning of your career, an unrelated job is better than no job, in my opinion. However, I don't agree that any job is better on a resume than no job. If there's a good reason for "no job," then it can be better than "any job." I've voluntarily undergone long stretches of unemployment, but I had sound reasons that I can explain coherently. –  May 14 '10 at 21:31
  • @Jim C -- nah, you just fill the gap with 'independent contractor' ... but I still leave the gap, so I can regale people with the story of being fired for 'use of sarcasm'. (and you have to be care if you were collecting unemployment for a period ... but most of us can fill that gap w/ volunteer work, etc. if we wanted to.) –  May 15 '10 at 03:14
  • I don't know if the law/lawyer comparison is totally valid, but the sentiment that most Comp Sci programs in general will not prepare you for the workplace is a fair assessment. The transition from academia to practice in programming exists, but it is less of a leap. –  May 17 '10 at 14:47
  • 5
    piotr: "Do you really think getting an unrelated job to your career is going to help your cv at all?" Yes, absolutely. I'd think much more highly of a programmer working construction during downtime than of a programmer sitting at home all day. It shows a work ethic. I've never ended up wanting to hire a lone genius who sits at home writing code alone. They don't tend to know how to work well with others, or do the dirty part of jobs. –  May 19 '10 at 23:50
48

I am guessing from your user name that you are a woman... If not, feel free to ignore this, or adapt it to your own point of view.

In my experience, women graduating from college in computer science consider themselves much less competent than their male counterparts with similar skills. One might say that women are (or, to be exact, women I know are) simply more honest relative to their own shortcomings, but in the end, they have more trouble selling themselves to employers.

(I spent most of grad school feeling like a total failure compared to my peers, and ended up graduating top of my class. )

So my advice would be to stay honest with yourself and keep on working hard on developing your skills. But do not downplay what you do know when looking for a job, and don't restrain yourself from applying for "reach" jobs.

  • Find a mentor who can give you a real assessment of your value.
  • Conduct fake interviews, and learn how to project confidence, energy and passion.
  • When you do land an interview, talk about your personal projects and ask technical questions. Your drive to learn and your energy is your best asset.

Added as an afterthoughts:

  • When you do land your first job, don't be afraid of negotiating your salary. Too many women just accept the first offer gratefully, and never get what they deserve.
Kena
  • 331
  • 1
  • 6
  • 8
  • 6
    Not just a female thing; People who are either already competent, or capable of seeing that they need to grow (Yay you!) tend to question their own competence more than those who do not begin to suspect their own incompetence. There is a name for this phenomenon. The Dunning–Kruger effect. Your experience at school has been a phenomenal success if you leave the school able to continue your lifelong path of learning, in whatever carreer you end up in. I wish you the very best of luck!!! – Warren P May 21 '10 at 16:08
  • 1
    Warren: Absolutely true; a lot of my less outspoken male peers had the same problem. In many cultures around the world, including in North America, little girls are not encouraged to compete aggressively and to show off their skills as much as little boys are, so I've seen that trait more often in women. But it's definitely not just a feminine thing. –  May 21 '10 at 18:20
  • Awesome answer, I totally agree. Also, I noticed in my graduating class, the women who did stick it out were often top students. (Meaning, sadly, a lot of women who dropped out could have made perfectly competent programmers...) –  Jun 23 '10 at 19:48
39

A lot of people have said that you should start a personal project. In my opinion, this is the best advice on here. I would add some things I didn't see when I read the other answers...

  • Pick something in an area that you are passionate about. The best place to find this is maybe in your interests outside of computer science. That could be a non-profit you're involved in, a hobby that you're passionate about, a sport that you do.

  • Find a collaborator. Coding alone is hard, so another thing that would help enormously is if you found a buddy to collaborate with you on this project. This makes it so much more fun and keeps you motivated. In his recent blog post Jeff Attwood talks about this exact thing in his experience of building SO. http://www.codinghorror.com/blog/2010/05/on-working-remotely.html

  • Pick something modest (initially). The ideal project would start with something small. If the goal out of the gate is too ambitious then it will become too daunting. Having done development for PCs, phones, embedded systems and the web, I would say that the web is best place to look for something achievable that other people could start using immediately.

  • If possible, pick something that other people will use. Even if you only have ten "customers", the feeling of having other people use the thing that you have built is like a drug. Incredibly satisfying. Learning from customers and responding to them is also such a valuable learning experience.

If this project is a labor of love that you happily work on deep into the night, and then leap out of bed the next morning to get back to it, then good things will follow. You will learn, the confidence will grow. And once you have something out there that people can see, it becomes the beginning of your portfolio. Nothing impresses programmers and (decent) hiring managers than something real.

Greg
  • 131
  • 1
  • 3
34

A few comments, from the perspective of someone who has been a developer for 20+ years:

I see websites like Stackoverflow and search engines like Google and don't know where I'd even begin to write something like that.

They are the product of teams, mostly building on libraries and infrastructure (.net, java, asp.net, etc) produced by other teams, and backed by experience and resources. That you, individually, don't know where to begin to do something similar is completely understandable. Don't worry about this.

During one summer I did have the opportunity to work as a iPhone developer, but I felt like I was mostly gluing together libraries that other people had written with little understanding of the mechanics happening beneath the hood.

A lot of development work is now like that, I'm afraid. But there is a lot of scope for doing interesting work 'on top' of those libraries. And don't worry about finding algorithms difficult - you'll almost certainly never have to implement a quicksort, linked list, or whatever during your career. That's what libraries are for.

Basically I'm graduating with a Computer Science degree but I don't feel like I've learned how to program.

Knowing how to program, and knowing how to function as a professional developer are two very different things. You just need some experience, preferably working with other developers on real-world systems. Try to add either C# or Java to your skillset - there isn't much difference between them so the knowledge is transferrable. Beware of becoming too specialised too soon. You may have to accept that you won't earn much money immediately, so keep your personal costs low for a while if you can.

Start working on the project you mentioned, but as well as increasing your programming knowledge, try to use it was a way to get experience of related skills like version control, unit and integration testing, and even writing simple documentation. These sort of skills are what distinguish a developer from a programmer, and are a good showcase for a prospective employer. There are lots of free tools available (the express editions of Visual Studio, github, nunit, Google apps) that can help.

From what you've written it sounds like your CS degree has taught you how to think about technical problems. You also seem to have a good level of self-knowledge, including about your current technical limits and experience. Use these as advantages. Now isn't a good time to be entering the job market, but if you work hard at it you'll be okay. Don't worry, learn, get experience, stay up-to-date, try to do things you enjoy.

Good luck!

Andy Johnson
  • 101
  • 1
  • 4
  • "you'll almost certainly never have to implement a quicksort, linked list, or whatever during your career" In my current position I've had to implement a quicksort for a custom written linked-list. I didn't have to implement the list though. There is definite value in knowing how basic things work. –  May 14 '10 at 16:46
  • I agree that a good developer should know how these basic data structures and algorithms work, and be able to implement them. I've had to roll my own linked lists a couple of times but never (luckily for me) had to write a quicksort. My point was that that the OP shouldn't worry too much about the algorithms she may have studied during her degree because many languages/platforms (.net, Java, C++, etc.) will probably include pre-written implementations. –  May 14 '10 at 21:58
31

Programming isn't all about your understanding of algorithms or your GPA during college. Programming is about having the ability to think outside the box, desire and willingness to learn and most important of all, creativity.

On a personal note, I had just graduated college last May and I had a terrible GPA. I had focused more on my social life than academia and I paid the price.

However, during my recent job interview out of college, (which had took me less than a year to land) I showed off my creativity, passion for learning and analytical skills, which had helped me get the job.

27

Note: I expect this post to be downvoted. This isn't an answer to the original poster but an observation on most of the comments I've read above.

The answers I'm reading above are really scaring me. There seems to be an almost universal feeling that comp.sci degrees are useless or not relevant, or don't teach you anything. Have comp.sci degrees really become that bad, or is this all just hot air from developers without degrees trying to justify their lack thereof?

Seriously people, what are they teaching people in university nowadays? When you do a CS degree (at least when I was a student) by the time you graduate you would have a good grasp of compiler design, comp. complexity, formal methods and logic, a whole zoo of data structures and algorithms, basic operations research (LP etc), databases, cyptography and security, scheduling algorithms, network protocols, internet development, OS and kernel design, parallel algorithms and data structures, numerical algorithms and a whole lot more. The whole lot is typically topped up by a huge programming project that forms part of the final dissertation. Don't tell me that comp.sci graduates don't get enough practise programming.

I also appreciate the fact that some of the more traditional comp.sci degrees omit some aspects of the software development cycle, you probably won't hear much talk about TDD, unit testing. But let's be brutally honest: it isn't really rocket science, is it? You won't hear about SCRUM or function point analysis either. Teaching detailed courses on such basic issues would be pretty redundant, though many degrees nowadays do have a course on system design where they do give students an idea of how these things work.

Granted, you might not be an expert in .NET, PHP or the other current industry standards but that should be irrelevant. In 5-10 years time the languages of choice will have changed anyway. Just because you learn to drive in a Peugeot doesn't mean you shouldn't be able to drive a Fiat, and the same should apply for programming languages. It should take a few months practice with a few good books to be competent to work in any language.

Surely if anything is a waste of time its these costly "certifications" which basically involve sitting for an electronic multiple choice exam and ask you about (usually pointless) minutiae of a particular architecture or language. They tend to measure a programmer's competence by his/her knowledge of certain pathological programming cases.

I have worked in the I.T industry in various companies and I have also been involved in the interview process for other software developers. We did set out a few of the usual fizzbuzz questions, but there were aimed mainly at people without formal training or trainees. I have never ever met a comp.sci graduate not capable of answering a basic and not-so-basic programming questions.

Note I live in Europe and know only about European university degrees. However I'm pretty sure that the university standard in the U.S is much higher than that in the EU.

Il-Bhima
  • 101
  • 1
  • 2
  • 4
    This is the same way everyone feels about all degrees once they get them. School in general prepares you for a broad array of situations. Once you start working, then you can get more specialized and you'll maybe feel like you wasted all that energy on school, but how did you know what you were going to end up actually doing? Better safe to learn about a lot that you can build upon than to have never learned about it at all. –  Jul 07 '10 at 13:38
  • 1
    I see both sides of the argument. I've met some really smart CompSci degrees, but I've also met some guys with CompSci degrees who are now working in a call center because they didn't really care about CompSci. I learned a lot in my CompSci courses, but I have to admit most of the technical skills that have landed me jobs I learned out of school on my own time. When I interview for software engineering jobs, they generally test your knowledge for specific technologies, problem solving strategies, and interpersonal skills. None of which are explicitly taught at college. – Cerin Jul 07 '10 at 14:14
  • 1
    I've met dozens of CS grads - while interviewing them - that couldn't explain any sorting algorithms, even if left to think for five minutes. Perhaps the university standard here in the states isn't applied entirely well across the board. As @Chris S points out, it's easy enough to slide through a degree without learning much of anything. – Dean J Jul 07 '10 at 14:31
  • You're mixing up two things here. I found doing a degree incredibly useful — I *know* it made me a much better coder, but I can never work out exactly why (presumably a combination of a little knowledge and a better approach to problem solving). That said, there are plenty of graduates out there (from a fairly prestigious university) who can't even figure out how to implement (9,5) ECC with a 512-byte lookup table. The good coders are the ones who go beyond “I don't understand this, but I can do the exam questions”. –  Jul 13 '10 at 14:05
  • 1
    interesting problem, but why would you do normaly a ECC test ;) , except for hardware, of course But its an good example of self-taugth stuff that you don't/can't? learn at compSci –  Jul 15 '10 at 17:47
24

Your humility will serve you well. The Beginner's Mind is helpful for all kinds of learning, no matter how much education and experience we have.

Work through exercises, as others have suggested - at Project Euler and elsewhere.

Work out solutions to help others here on SO. The exercise of understanding the question, determining what you know that can apply, and finally articulating an answer will help build your confidence, as the exercises build your skills.

Stick with it; you'll be fine.

Carl Manaster
  • 4,173
  • 18
  • 31
  • 9
    Humility will serve you well, [except when it doesn't](http://www.shirky.com/weblog/2010/01/a-rant-about-women/) -- to get your foot in the door (*including* on a personal project) you need a certain amount of chutzpa, you may even need to be irrationally confident. –  May 13 '10 at 20:16
  • @Ian, I humbly accept your correction. ;-) Seriously - it's a good point, and a good article. I don't like the conclusion, that women should be assholes just like men, but it's hard to argue with the practicality of it. – Carl Manaster May 13 '10 at 21:51
  • @Carl -- too-quick of a conclusion :-) Hiring staff / managers eat that arrogance / self-promotion up. Especially when evaluating candidates for technical positions that they don't begin to understand the requirements of. I've seen many very qualified males in the same boat as these poor females, when that one over-confident, self-promoting person shows up and steals the show. I don't think we can consider it a win to encourage more females to be over-confident. The place where we can do the most good, IMHO, is by training HR folks to make better decisions, or by re-vamping the process. –  Jul 30 '10 at 16:30
23

Graduating with a comp sci degree no more makes you a great programmer than graduating from a music program makes you a great musician.

There's no substitute for practice, practice, practice and experience. Program 8 hours a day and in 5 years you might have that understanding that you lack right now.

Larry Watanabe
  • 481
  • 2
  • 4
  • 6
    That's a catch-22 isn't it? Program full-time to get the job you want. – Joseph Yaduvanshi May 13 '10 at 00:16
  • 16
    No, in 5 years you'll realize that you know nothing :) – Earlz May 13 '10 at 01:34
  • you don't need to have a job to program 8 hours a day. but if you don't have a job, it is especially important because you don't *have* to program so you might even get rusty. – Larry Watanabe May 13 '10 at 02:18
  • 1
    @Earlz, And the nothing that you do finally know is already obsolete. – Dan Bryant May 13 '10 at 02:18
  • as an aside, learn java :) I used java in 97 and hated it until 96. But the language has improved immensely, the tools (eclipse) as well, and the hardware (to make eclipse bearable :). It's a whole new ballgame. – Larry Watanabe May 13 '10 at 02:20
  • 4
    Indeed -- with all the "Java schools" (which may or may not have been the case here), it's easy to forget that computer science is not programming. I know people who took a CS degree and went to med school, and biologists who ended up as programmers. Yet nobody ever asks why a biology degree didn't make them a surgeon: everyone knows that studying biology is not practicing medicine. –  May 13 '10 at 02:24
23

Such a candid question, great answers - I'm gonna chime in briefly :)

The answers so far made me lol a bit - they potentially celebrate our own greatness a tad ironically. I come to SO because of poor documentation and bugs in frameworks. There is obviously other gold here but it is worth retaining your humility, even if you do become a great dev - and I say that from the perspective of personal historical(?) arrogance.

Keep in mind that you may not (are probably not) being hired by a techie though better HR people and managers will use a techie to assess you.

Employers have a plan for their employees, try and perceive that plan the whole way through and slot yourself into it respectfully, perhaps giving it a bit of personal spin and enhancement. Difficulty and opportunity can arise when an employer doesn't really have a specific plan - asking good questions and helping them specify the plan can really make you stick out in these situations.

Business people can be (rightfully) paranoid about devs patronizing them as we often have to manage their perceptions a bit to help them with decisions they don't understand - and I say that, tongue in cheek, to show you the perspective NOT to have or develop of your non-tech co-workers. I humbly think that understanding that this is often the essence of relationships between techs and non-techs is important - and it's hard to avoid, what we do is obtuse.

Being professional, open-minded and respectful does get jobs - if you're fuzzy on what professional is, I'm sure there are places to work it out on the web - I wish somebody had pointed that out to me when I started. :)

The final thing that I would say is that, as you get better at development and architecture, and you already sound like you've stepped onto this path, you may find your professional code can become intensely dis-satisfying, even if it is the appropriate solution.

I'm not sure what the solution is there but try to find an outlet and be less emotionally involved in your work, it'll help you pace yourself and live a better life - be especially careful about trying to put in extra effort to make something "right" - a lot of the time you will be creating complication for your co-workers and you'll almost never be able to put in the amount of time you need to realise it within the timeframe of your project. A symptom of this is "going dark" - when you don't want to explain what you want to do to anyone. Many of the best devs can explain the essence what they're doing to a lay person - this is a great skill to learn and I've found it intellectually liberating to practice.

Heh, and when estimating, to start with, divide your task up into bits, total up the time and then double it (it's called, divide, conquer, march home ;)

Good luck! I left school expecting to be a ski instructor and ended up a lead dev. I'm sure you'll do well at whatever you end up doing too.

Seth
  • 131
  • 3
22

Yes, it's reasonably normal- most schools, even prestigious ones, do a great job of teaching computer science and a terrible job of teaching software development. This is getting slowly better, but still has a long way to go.

Anyway, it sounds like you're doing most of the right things:

  • Program outside of work
  • Read books on software development (Code Complete, Design Patterns, Mythical Man-Month, etc).
  • Keep learning new technologies- school should have taught you how to learn languages, not the languages themselves. Learn new frameworks, IDE's, apis, libraries, build tools, etc.
  • Hang around on sites like SO and here. Interacting with experienced people on a regular basis is one of the few semi-shortcuts to wisdom.
Fishtoaster
  • 25,909
  • 15
  • 111
  • 154
  • 1
    Honestly, Mythical Man-Month is a bit overrated, isn't it? (But I really like "* in a Nutshell" kind of books). – Camilo Martin Nov 27 '10 at 12:27
  • 2
    @Camilo disagree. Mythical Man Month is on the subject of software engineering, while the nutshell books are solely about a single technology. Eventually, you're going to need an understanding of peopleware issues with software development. MMM is one of those reads that covers the topic. – Brian Wigginton Feb 12 '11 at 21:09
21

Really great question. I'm sure there are a lot of people who are going through exactly what you've described in all walks of life and job markets.

First - no more worrying about things that are out of your control. You are not allowed to stress or even think about school, what you did or didn't learn or how well you did academically.

Second - specialize. There will always be demand for people who are really good at what they do even if what they do happens to be obscure. You need to pick your favorite programming language and resolve to completely master that language and “make it your own.” You already have a lot of great advice about how to improve programming skills but at the end of the day nothing compares to do finding an authoritative book on the subject and locking yourself in your room for a few days while you do nothing but read every page and write out every example the book gives.

Third - advertise yourself. In this history of computer science this step has never been easier than it is today. The answers that you give and the questions that you ask on SO are your resume. Take it upon yourself to become the leading authority on SO for that language you've decided to master. Take responsibility for any question that comes through this server with your tag on it, even if it means hours of extensive research and coming up with late answers. Search the archives and read through every question ever asked on SO on your topic. Fix misinformation, provide your own answers and variations to answers and combine a few existing answers into one better answer. Flooding SO with an endless stream of your comments, answers and edits, should be your raison d'etre (plus its fun because you get reputation points).

Fourth - work on your public image. Self-confidence is essential for landing the best job. Companies want people who are great coworkers, collaborators and communicators. If you think this might be a problem, tell your friends that you need them to boost your ego and shower you with endless complements then go to your local library and pick up one of these.

Ami
  • 2,055
  • 1
  • 16
  • 20
  • 2
    +1 for mentioning the importance of collaboration/communication skills. Most graduates lack them. – Denis Otkidach May 13 '10 at 14:23
  • 1
    I do not agree with specializing, every technology will die some day so if you specialize too much you end up without work... ok, some technologies (=> COBOL) die very slowly, allowing you enough time to specialize in a new technology but it's still risky. –  May 13 '10 at 21:27
  • 1
    Specialization has its place, but I'm not sure that right out of college is the correct time. I'd also argue for supply and demand -- part of the trick to specializing is finding the niche that's in need of filling, not the one that's already full. (and on the COBOL front -- a couple of years ago, my seat-mate on a plane looked to be in her mid-to-late 20s, but was dealing with a project porting a legacy system ... and as I understood it, they were still sticking with COBOL, just had to move to new hardware -- so there's potentially a new generation of COBOL programmers out there) –  May 15 '10 at 03:22
21

Okay, so saw this hacker news and I was like "HOLY CRAP THAT'S ME!!"

So I graduated last December with a degree in CS and felt that somehow I had managed to pass my classes and get a degree without actually earning it. It felt like all my classmates had incredible coding skills, and that all I could do was make basic Java programs. Learning how to code and becoming a good coder just takes a ton of time. There is sooooo much stuff out there to learn and my advice is just to take it a little at time. You'll learn things as you go. Like everyone else has sad, the best way to learn is by doing especially with coding. Not to mention there is SO much about building applications that they don't even to bother tell you about in school. Don't feel bad, just know that there is a lot out there for you to learn, and realize that it's gonna take time to learn it.

I think you should definitely look past the city where you grew up. There are a ton of companies out there hiring CS grads, and not all of them require or expect you to be a great programmer right out of school. There were plenty of interviews I went on where I didn't get asked any coding questions (there were also a lot that asked me to solve algorithms and to code). Apply at companies that care more about your ability to learn than what you already know (in my experience bigger companies care more about this because it won't impact them as much if you aren't able to crank out code right away).

I don't know if coding is something you want to do and pursue, but there are also plenty of jobs that are non technical that require a technical background. You could look into those options.

I wouldn't focus on learning the ins-and-outs of one language like C# or Java and focus on the principles of programming. You should be able to transfer good coding skills and apply them in any language (this is important for longevity in your career..Java isn't gonna hot forever). On the other hand, knowing the "hot skills" can help land a job. Interviewing skills are REALLLLLY important. Take every interview you get, even if it's just for practice.

Anyways don't think big companies like IBM are out of your reach. I felt the same as you a few months ago, and I work at IBM now. My GPA was not that great either. I still suck at programming but I know I'll get better with time. Just be confident in your ability to learn!

  • 1
    I'd say that big companies like IBM are *more* in reach than many other places -- they have enough people there that they can train up their pool of talent, unlike smaller places where you'd be expected to hit the ground running. And there's always internships -- it might be a bit late having already graduated, but many government agencies bring in summer interns ... so you could get that 'NASA' or similar on your resume. –  May 15 '10 at 03:27
20

Wow, what a lot of answer before this one.

How about a completely different response...

Lets reframe your problem in terms of being a human.

"I've graduated conception class and I'm just about to be born. My mother is crowning and I'm due to be delivered tomorrow morning. But when I look at athletes like Usain Bolt I think "how can I ever run that fast?".

But here you are, you are a fully fledged human, you've gone through school, you can walk, talk and if you've done a computing course you're pretty intelligent to boot. Nothing to be ashamed of.

Now, did Usain Bolt get born and then suddenly start putting in insane times on the track, or was it a large amount of getting on with life, finding out what he was interested in, followed by an incredible amount of application and then suddenly "Bam!" he was there.

More likely the latter. So don't give yourself a hard time for not knowing what you should be doing. It takes time to work out what is right for you. That is for you, not what your parents think, not what your peers think. What is right for you. What lights your fire. What makes you think *yes this is cool" even when everyone else thinks that is pants.

Its not uncommon to start (and/or) leave your degree having no idea what you want to do.

For me, I was good at school at the O levels (a UK qualification) but I couldn't give a damn about the A levels (required to get into University to do a degree). So I went to a lesser place to do my degree (and as a result not the degree I would have preferred). But I stuck it out (still not having a clue what I wanted as a career) and learned a lot about electronics and stuff that most software guys never learn. During this time I freelanced as a computer games writer.

The end result? After gaining my degree (with commendation) I walked into a job with a job interview at a higher salary than those doing straight electronics and I didn't have change my hair or wear a suit. What? Well at 23 that stuff matters (looking back now, at age 44 I kind of laugh at it, but thats the vapidity of youth for you).

That company went bust and then I started getting more serious. But it probably wasn't for another few years before I suddenly found (by accident) what really interested me. Turned out to be low level software tools. Should have been obvious - all the computer games I wrote were written in assembly, I always liked the low level stuff that no one else could get their heads around. But to see that as a future, that takes more maturity and no surprise that it didn't really manifest until my mid-20s.

I'm often impressed (and amazed) that young people, often still in their teens, seem to know what they want to do. But the real question is, are they still doing it at age 27? Or have they changed course because their early ideas were not correct for them?

In terms of how do I do something as impressive as THAT (whatever that is, Google, SO)? Well, you do it in chunks, just like you do software and everything else in life. You start with the basics, get experience in it. If you're good enough you carry on and get more experience, etc, or you abandon it because you realise that you're not good enough or that its as boring as hell (thats why I don't do comms even though its always been a gold mine. For me, its boring!).

By all means, look at your peers, look at your elders, examine their choices and interests. But examine your own as well. Often what at first sight seems mad/bonkers is actually the real deal. Doing something that you find interesting (rather than just paying the bills) is SO much more rewarding.

Yeah I know as a 23 year old you're focussed on the Audi TT and the cool flat and thus tempted by money rather than sensible career choices, but seriously at some point you'll realise the cool car isn't all its cracked up to be - that girl should like you for who you are, not what you drive.

Seriously, think about it. The not so cool solution may just be the right answer.

  • -1: Could you tighten this up a bit and focus more on the question and less about yourself? – Jim G. Jun 05 '10 at 15:32
  • 2
    It not about 'me', its about how I got from there to here without knowing initially where 'here' is. I'm just using my own experience as an example because I know my experience better than someone else's experience. If you read it as about me, you read it from the wrong perspective. Often if you "tighten" things up as you put it, your provide no background for the viewpoint being expressed and leave the reader confused. I could have written "I had no idea what I wanted to do when I graduated, but now I do blah blah". That wouldn't inspire anyone to continue - no "real reason to believe" (TM). –  Jun 07 '10 at 19:20
  • Good answer, Stephen. Just from a different POV than other answers here. –  Jul 23 '10 at 13:42
18

In addition to the great advice given by others, I would add participating in developer events in your area. Look for meet-ups, user groups, bar camps, code camps, etc. This will help you network with other developers, get job leads, keep up with new technologies, and provide a realistic peek at the skill levels of other developers.

Les
  • 121
  • 3
  • I want to chime in on this one. Do this. I was fresh out of a tech school working in medical records at a hospital. I started going to local .NET meetings. Took some time, but finally landed a position at a development firm doing server and application support. While not my final goal in life it beats the pants off of scanning medical files. –  May 16 '10 at 16:51
17

Follow the 10,000 hour rule.

In order to become a master of something, you need to practise for at least 10,000 hours. So spend 10,000 hours programming, and you will become a master of it. If you have not spent 10,000 hours programming and you don't feel like a master of the craft, don't be disheartened, just spend more time coding.

Also note that it will probably take you around 3 and a half years to do this if you program for 8 hours a day. If you only program during business hours it will probably take you about 4 years. If you haven't spent this much time during your 3/4 year degree programming, then you probably won't feel like a master.

barkmadley
  • 101
  • 4
  • 1
    and you have to make sure you are not doing the same hour over and over again! Push yourself to keep learning. – Froome Jan 13 '11 at 17:03
14

Very few people graduate any discipline being an expert at something they have merely studied. Computer science isn't in any way special in that regard. Nothing beats empirical experience and you only get that from developing fully-fledged software for real clients, with all the demands, time-constraints, changes and teamwork this involves.

Dan Diplo
  • 3,900
  • 1
  • 27
  • 30
  • 1
    Unfortunately, that's true. A Bachelor's is useless except as a badge that you managed to make it through. That said, comp sci curriculum is horrible at the undergrad level. CM's curriculum requires 5 maths, but combines formal language, automata and computability into one course and that is an elective. – MIA Sep 16 '10 at 06:31
  • 4
    Agree 100%. Why would you be an expert in something that you just got *qualified* for?? – Alex Feinman Sep 21 '10 at 14:20
14

Firstly, hang in there!

Secondly, here are some things that helped me:

  1. Keep your job search up beyond your region of interest. Definitely be ok to re-locate. Great chance to get out and see a new place!
  2. Because experience is low, I think interviewers want to make sure you're someone that will be excited and energetic about working and solving problems. So I made sure I was interested in coding for the company. Which I was ;)
  3. Ask your interviewer questions. Research the company and have some material ready during the interview. What design patterns do you use? Why X technology instead of Y technology? I feel this rounds you out as a person during the interview and gives you a chance to take a break.
  4. Code for fun at home! It doesn't have to be successful, but just write code that maybe utilizes a technique you've read about or a technology like a database.

Thirdly, I was in a similar boat as you when I graduated so again, hang in there and keep searching. Your first job is out there.

Robb
  • 201
  • 2
  • 7
14

Just a couple of thoughts, if I may.

Wendy says that one can graduate with a CS degree, yet have little idea of the practice of programming. Isn't that hugely troubling, even horrifying? It's as disturbing as the fraud that submerged English departments in the '70s: literature is not a collection of ideas that one can understand and integrate, but rather a bunch of 'texts' that the student must abstract and 'deconstruct' ( http://www.answers.com/topic/deconstruction ). Happily, that fetid tide is ebbing, maybe because the instructors who wiped out in its weedy surf are retiring now.

Years ago -- decades ago -- my first course in CS taught me assembly language (before C was invented) using actual problems like sorting, hashing, and searching (and, yes, recursion). My second course taught the design and realization of a real live working compiler. I was a part-time student at MIT and those two courses were all I needed to begin getting paid as a programmer; and to become just somewhat productive two or three months later.

So this morning, hearing Wendy's cry, I'm thinking that surely MIT, of all places, cannot have diluted its offerings and deluded its students with (in the context of programming practice) pretty-much-useless crap. But when I look at MIT's EE/CS curriculum, I see that's just what's happened:

http://student.mit.edu/catalog/m6a.html

I particularly notice that the the department uses Python as a/the teaching language! I mean, really! It looks like a CS degree at MIT means to qualify a student to become a teacher of CS at MIT. Talk about recursion!

Then I came across this contribution to Coding Horror ( http://www.codinghorror.com/blog/2006/07/separating-programming-sheep-from-non-programming-goats.html ) and thought it very much to the point of this conversation:

"I'm a latecomer to this discussion [about predicting success in programmer candidates], but in my experience as a late-blooming 30 year old CS undergraduate senior, I've found the programming classes to be useless, and less badly taught as un-taught. I've only been to a community college and then the University of Illinois in Chicago, but the introductory programming classes were:

"1. Object-oriented, which left students with little or no understanding of procedural methods, and

"2. Weed-out classes. The classes consisted primarily of descriptions of different types of problems and the mathematics behind them, rather than ayntax and structure, for which people were told to just read the book.

"Code was barely directly acknowledged until the Data Structures core, and then it still depended on which instructor you got, some being very code light and some being nicely code heavy. You could tell that it was a big temptation for teachers to be code light at this point, because if they concentrated on code, they would also have to concentrate on teaching students who had been in a computer science course for two years how to program.

"Since coding is a hobby for many young people, I think that educational institutions have relied on that to establish their expected learning curves, leaving people who had little to no experience programming when they entered school no choice but to cheat like crazy, spend all of their spare time studying code, or switch majors. And it isn't a necessarily a deficit in abstract thinking in my experience, because everyone I know who dropped out of CS ended up in Electrical Engineering, which is nothing to shake a stick at on the abstract front. They still don't know how to program, while doing math that I can't make heads nor tails of. Most absurd memories:

"1. Java as the required programming language. I'm not going to bash Java here, but wouldn't it be nice for students to have to learn their own garbage collection? And wouldn't pointers be a nice thing to learn, even if we never decided to program in a language with them again?

"2. Taking a core class on operating systems theory, after being being deluged with Java, and finding out it was in C (of course) without even one C class on campus?

"Of course, I'm thirty, and also one of those people who always programmed, so I had no problems, but I saw plenty of people who I knew were better at abstraction than me (from Calculus, DiffEQ, and physics classes before) and their total agony at trying to finish a program that had been stacked against them."

Just a couple of data points but, as others have said, haunting.

-- Pete

Pete Wilson
  • 1,766
  • 11
  • 15
13

I found this wicked site the other day http://99designs.com/ Under website design or other design you can probably find some software related projects.

This would be a great way to get coding, develop some new skill, meet some new people who may be potential employers and you may even make some money.

I have found there is great value to employers in showing that even though you didn't have a job you weren't sitting on your arse. Show that you got out there and did some projects, preferably ones you can show off at an interview.

  • I've been dividing my day between 1) sending resumes 2) reviewing books but I haven't been working on any projects. That's an very interesting site by the way. It looks targetted more towards artists and designers than software developers but I will have to investigate further. –  May 13 '10 at 00:24
  • I wouldn't worry so much about the books. As mentioned elsewhere, the only sure way to learn is by doing. Don't be discouraged by it taking a while to find a job. It's unfortunate, but sometimes finding the right one takes many months. Keep trying :) I agree with you, the site is more targeted towards art/design, although if you are interested in websites, there are some of those. The advantage is you can do a project without having the idea yourself, and you may get paid, otherwise you can look at http://sourceforge.net for other project ideas –  May 13 '10 at 00:55
13

Don't worry. Rome was not built in one day.

For each P in PeopleYouKnow
Try
  ask/call P for a Job apply for job;
Catch Denial As Exception
  don be worry;
  //you'll get a job later
End Try

Finally
 If you haven't found a job yet
  For each programmingJobAd in internet

 Try
    apply for job;
    Follow up;
  Catch Denial As Exception
   don be worry;
  //you'll get a job later
 End Try
end
//Keep trying.
//find a bug from this code.

EDIT: #! diff A B

3c3
<   ask/call P for a Job apply for job;
---
>   ask/call P for a Job job; if job is available apply for job;
9a10
>  //(sic)
14c15
<     apply for job;
---
>     apply for programmingJobAd;
20c21
< end
---
> End
Odinulf
  • 101
  • 3
THEn
  • 101
  • 3
12

First, don't worry that you can't code google. Google was made over a number of years by a lot of very experienced programmers. That's like finishing a visual arts degree, and wondering how you could make The Last Supper.

For job hunting, don't sweat the requirements. Just call them, and say that you don't have the years, but you would still like to apply. If they really want the experience, ask if there are more junior positions available - they might be able to create a new position just for you. Most jobs are created for a specific person. Make sure you contact the project manager, not the HR department. HR doesn't usually create new jobs, they often just screen applicants for existing jobs. Google is your friend in this case ;)

Don't try to code a web app (like google or stack overflow) unless you want to invest about 6 months. It's a huge learning curve. You need to learn to manage a VCS, run a web server, HTML JS and CSS coding, a database system, and the web app language. It's brutal. Most of these technologies aren't transferable unless you want to do web work.

If you do want to do web apps, you might look at installing a simple web app (like this django-based IP to country lookup app - http://www.coulix.net/blog/2006/aug/17/ip-country-flags-django-comments/). You could shop around for a $90 dreamhost discount code (so you can work on a real web server), and try to set things up. Don't worry too much about security or performance (but do use ssh) - it's just a learning project.

If you want to do stuff on the desktop, you could have a look at pygame.

wisty
  • 131
  • 2
  • I thought the first version of google was made in a short time? Like over a summer or something like that – Earlz May 13 '10 at 05:22
  • Apache running under Linux on your desktop is a "real web server", no need to spend money. What do you think hosting companies are running? – TMN May 14 '10 at 19:24
  • @TMN, by web server, I meant a production hardware and software stack. I know that DH uses Apache and MySQL, but developing on a production server has advantages (everything is set up, including tricky things like mail, and they do the domain registration for you) and disadvantages (like no root, and you have to get used to remote development). Using a production server makes you dive into web work. –  May 17 '10 at 01:06
11

You can read all about programming, but you won't learn how to really program until you well.. start programming!

I would recommend you start a personal project. What's something that you want to create? a game? A blog? It doesn't matter. Just make something!

Then, after doing some real coding for a bit(few weeks or months) I recommend trying to contribute to open source projects. The personal project helps you to figure out how to program when the goal is not already laid out for you(knowing how to actually design something is not often taught in school). Contributing to existing projects teaches you to work in a team and to follow code standards.

I wouldn't waste my time reading a whole lot else. I'd say at most you should probably read about 20% of the time and write code the other 80%. (of course, by time, I mean your time set aside for programming related things)

Earlz
  • 22,658
  • 7
  • 46
  • 60
9

Learn How to Program in 10 Years!

You've finished your degree. Congratulations! You're now ready to start learning.

Also, don't worry about what you don't know. Hopefully the feeling that "I know nothing about anything; the more I learn the less I know!" will never go away. If it does, you'll know your brain's stopped working.

Frank Shearar
  • 16,643
  • 7
  • 48
  • 84
  • Exactly, it takes ~10 years (10,000hrs) of good practice and experience, to become an expert at anything – CaffGeek Oct 26 '11 at 19:21
9

Well, here's MY two cents... coupled with quotes from a few other sources.

A surprisingly large fraction of applicants, even those with masters' degrees and PhDs in computer science, fail during interviews when asked to carry out basic programming tasks.

-- Dan Kegel via Jeff Atwood

http://www.codinghorror.com/blog/2007/02/why-cant-programmers-program.html

This is a problem that I've seen plenty of, even down to the point where people with years of "experience" on their resume not being able to perform simple tasks. Personally, I think the educational institutes are largely responsible for this, from the faculty who don't know the subject matter or can't teach it to the counselors who should be steering students that only want to get into a particular for the money without a reasonable interest in the field itself.

From the sound of your question, you're coming out of college feeling like you just got screwed out of a few years of your life to get a piece of paper. That's how a lot of hiring agencies view a degree these days for programmers. They want people who have proven that they can program, not just someone who has a piece of paper. But the fact that you're asking this question in the first place shows me a desire to actually learn to program.

One of the best things you can do to learn has been pointed out several times already, which is programming stuff. Unfortunately, while this absolutely will increase your knowledge and understanding of the technology, it's not incredibly likely to help you find work unless it's something you can put on your resume.

I suggest that you start by building yourself a few applications with specific purpose, figure out what you can do and what will challenge you to move forward, then go to some places where you can pick up freelance work. Don't expect to get paid a huge amount for freelance work you pick up on the web, you're looking to add it to your resume, not your wallet. Once you've got 3-5 items that you can point to and say "I built that" or "I designed that functionality for them", then list all that stuff out, and find a hiring agency (they're EVERYWHERE... the headhunters) and work with a few of their people to streamline your resume so it highlights your education and resourcefulness in finding work to do, and minimizes the aspect of your lack of experience.

The biggest thing to remember when you're talking to potential employers (that I see people mess up all the time), and something that ANYONE IN ANY FIELD should pay attention to, is that while you absolutely don't want to sell yourself short or minimize what you CAN do, don't OVERSELL yourself and make them believe you can do things that you have no clue how. Employers always have a knack for asking you to do things you don't know how to, and it's your job at that point to figure it out, but if you tell them you already can, you're inevitably going to eat your words later.

Best of luck to you!

9

I think you sound like every person who's ever graduated with a computer science degree without having held a "real" (relatively long-term) job as a programmer. I will first say this and it is the most important part of my answer:
RELAX!!

It's obvious that you're dedicated to becoming a programmer. Otherwise you wouldn't have posted such a brutally honest post about yourself in such a public forum.

The "problem" (if you want to call it that) is that you've only seen half of the game and you're trying to draw conclusions about the rest of it. That is, you've seen all the academic code and you feel like you should now be able to create any software project that comes along. Well, here's the first nugget of truth in your post:

it is a long and painful process.

I couldn't possibly agree with you more. You don't think you'll be able to create something like Google or StackOverflow? Even after 10 years of working in industry (as you say)? Well yeah, you probably won't. First of all, Google and StackOverflow were created by TEAMS of developers. Not one dude in his parent's basement. Second, 10 years, if you're lucky is exactly what it will take to be, not just successful, but wildly successful. See the 10,000 hour rule : http://ezinearticles.com/?The-10,000-Hour-Rule&id=2433795

they tend to demand 3+ years of experience I do not have

This is the classic catch 22 of graduating with any college degree. I can't get a job because I don't have any experience. I can't get any experience because I can't get a job.
What's a guy to do?
Well the answer is actually quite simple. Just KEEP APPLYING. Eventually someone will give you an interview and eventually one of those interviews will put you in front of someone who sees the potential in you. Rule number one of achieving almost anything? FAIL! And when you're sick of failing, learn to fail some more. Keep failing until it doesn't feel like failing and before you know it, you'll have mastered the gentle art of Interviewing. In fact, several friends recommend I interview at least 4 times a year (i'm almost thirty, so that number is smaller than how many interviews a year you probably should take). This way, you never forget WHAT your skills are or HOW to present them. Even if you're not after a job.

My GPA is OK (3.0) but it's not high enough to apply to the large companies like IBM or return for graduate studies.

How do you know this? How do you know IBM won't hire you? The reality is you're probably right. They are usually looking for people with 4.0's from MIT. But that doesn't mean they're NOT looking for people who can program to fill all kinds of roles. Sometimes you apply for a job and a manager sees your resume and says, this kid isn't a fit for me but would be great for my manager friend XYZ, possibly at a different company. Let me forward him this resume. This is called networking. And you can't start networking without that first step of putting a resume in front of someone. Even if they've seen a million resumes just like yours and your pretty sure they're looking for someone with a better GPA, skillset, more experience WHATEVER!

What is the harm in applying? The worst they can say is no.

I've worked hard but don't have the confidence to go out on my own and write my own app.

You don't need confidence to write an app. You just need to know how. And it sounds like you know how to write an app. Write a stupid app. Write a bad app. There's a rule of nine in comedy writing that I think applies here. Write nine bad jokes in order to get to one good (or at least workable joke). So go out and write nine crappy, useless apps. You'll learn a lot about how to write apps and it'll get you thinking about what a better app might be.

Finally, and I've said this before but it bears repeating:
Don't give up!
and more importantly:
RELAX!

Ramy
  • 162
  • 1
  • 7
9

Practice makes Perfect.

And don't be afraid of making errors.
In the past, i caught myself having the IDE opened and ready to code, but instead of coding... I started thinking:

  • "No, i shouldn't do it like this..."
  • "Nah, what im thinking seems ok, but will fail in the long run.."
  • "Maybe, i could just..."

Excessive thinking is counterproductive.

  • 3
    + I still do that a lot. I think maybe too much even it is simple CRUD operation code.... – THEn Jan 13 '11 at 22:19
8

I remember when I graduated and had my shiny new degree. After the first month with not even a call-back, I became a tad depressed. After six months had gone by, I was discouraged and stopped seriously trying to look. It wasn't until a year after I had graduated that I wound up interviewing for a position that I thought was way outside my skill set. I've been here for almost five years now and I'm very happy with the challenges and experiences it offers.

Life will take you in stranger directions than you can even being to foresee, so don't let discouragement get the best of you. Focus your energy toward your passions, whatever they may be; the rest will follow. Is this your passion?

Dan Bryant
  • 261
  • 2
  • 6
7

Let me join the chorus of people shouting the obvious "Practice". It is definitely the primary way to really learn to program.

But, if you are looking for practical advice in getting that first programming job, let me recommend certifications. There are a lot of people out there that bemoan their flaws, and most of them are right. Certifications are flawed. With that said, many employers look for them. When applying for jobs when I first entered programming I was flat out told that my certifications helped me get the interviews. When I started doing the interviewing, someone with a significant certification always got an interview. A certification will probably not help you get a job, and it should not, but it will help you get the interview, especially when you are first starting out.

Also, do not be afraid, especially in this economy, to take a non-programming job while you continue to sharpen your skills at night. I would recommend trying to get it in something computer related such as in help desk or software QA, but that will help keep you financially stable while you look for a programming job and it will build your resume and hopefully develop contacts.

7

Writing games is always a win, assuming you like games. Of course in my day, our idea of "advanced graphics" was Rogue. Nowadays, I don't know how folks make games without a large set of graphic assets. At least games that don't utterly depress you because they look yucky.

Truth be told though, if you're caught up in the coding part, what it looks like is actually rarely important. But it can be discouraging.

Writing a web app gives you real experience working with other services, notably databases, and that can be invaluable. Knowing SQL is really important I think, but it's the most boring thing in the world if you don't have any data. 10 row tables are no fun.

If you want to experience "programming" at its core, write a compiler or an interpreter. These programs have the benefit of pretty much touching on every major aspect of modern computing. If you're really motivated, write it in C or C++, but DON'T use the multitude of libraries out there. Implementing your own symbol table for example. With a recursive descent compiler, you can skip having to use a YACC or LEX program, and do it all yourself.

If you're tired of stitching libraries together, then start coding up your own, within a larger project.

Modern libraries, notably in Java and C#, are very powerful and really enabling. But I find it disturbing that it's the first thing folks look for for even some of the most mundane tasks. Some are very complicated and really powerful. Others? Perhaps not so much.

Writing lots of junk is always helpful. Practice makes perfect.

  • 3
    Writing $foo is always a win, assuming you like $foo (for any value of $foo). :-) –  May 13 '10 at 02:29
  • 1
    "Write a compiler or an interpreter": and design a language you think is cool. It makes you understand why certain choices are made in other languages too, and helps you look very close at a lot of languages and their (possible) implementation. I suggest writing an interpreter first, as compiling (as with every translation process, e.g. translating French into German) requires more knowledge (e.g. you need to know both languages), while interpretation lets you "build on" an existing language, which you can expose as a library :-). –  May 13 '10 at 03:05
  • very nice, especialy the compiler part, you need a great brain-toolset to do such a thing and you can learn increbile much(parsing, trees, graphs, assembler stuff, optimization stuff ...). And your post do have a fun bonus "Writing lots of junk" –  Jul 15 '10 at 18:29
7

Good question. First of all if you are still in school read Joel Spolsky's (Advice for Computer Science College Students. This is a must. http://www.joelonsoftware.com/articles/CollegeAdvice.html Then you can also read this book 'The Passionate Programmer - Creating a remarkable career in software development - Chad Fowler foreword by David Heinemeier Hansson'. Although the author didn't really do computer science he spent alot of time learning to program on his own and really knows what he is talking about.

Chiddy
  • 1
  • 1
  • 2
  • Agreed - great read. I am a CS student myself and a few of his articles make a lot of sense. –  Jul 31 '10 at 15:19
7

I see websites like Stack Overflow and search engines like Google and don't know where I'd even begin to write something like that

Although this has probably been said before (7 pages of answers!), just in case it hasn’t — there’s a lot more involved with making software than programming.

No-one’s figured out how to teach people to have good business ideas. Computer science degrees certainly don’t do that. Great programming/algorithm skills can be invaluable to implementing a great business idea, but you need the idea first — you need to figure out what people want, and be the first to implement it right.

From what I know of Stack Overflow, Jeff came up with the idea for Stack Overflow by being a working programmer for 10–15 years, then got a guy who’d already founded a successful software company to help him develop it, and got a couple of his old programming colleagues to help implement it. Without all of his experience, he wouldn’t have known what the internet was lacking (great programming Q&A), and without all of their combined experience, they wouldn’t have known how to implement it successfully.

From what I know of computer science degrees, they’re a bit like English law degrees: they study the subject in a theoretical, academic way — which is great in a lot of ways, but doesn’t teach you how to practise the fields for money in the real world.

So don’t worry. The next ten or so years of bitter commercial programming experience will be what prepares you to write the next Google :)

Paul D. Waite
  • 1,164
  • 14
  • 18
6

A couple of things to note, in addition to the useful comments posted by others:

1) Big picture: Learn how business works, not computers. Most commercial programmers are doing precisely what you said, tying together libraries to solve business problems. The way you learn about business is to step back, and take a big picture view of what happens in a company, and think about how code improves people's work. Inevitably, over time, you learn how the business works, and how to improve it. Programming is just a modern organisational tool.

2) What you learn in academic university is not what people do at work. At uni, there's a much more theoretical focus. At work, you focus on getting things done. This is why you feel you can't program. You're right to feel that way, but it isn't reading more algorithms and O notations that will make you better. It's immersion in a business environment that will.

Carlos
  • 874
  • 7
  • 13
6

"Winning means you're willing to go longer, work harder, and give more than anyone else." Vince Lombardi

Saurabh
  • 101
  • 4
6

I know I'm four months late on this (I don't visit StackOverflow on a regular basis) but I would like to add something:

I graduated with a degree in Computer Science and only learned C++ and Java while I was there. I caught a break doing a programming job with no programming experience because they saw my degree.

The thing is - if you know how to write in C++ you can figure out any language.

C++ is like driving a stick shift and C# is a automatic transmission. All the employers wanted to know was if I had the ability and the drive to learn, if I had a personality that would work well with the team, and if my character and ethics were solid. They knew that what I could do was a lot different than what I had done and so that's how I got a chance to prove myself. Just be confident and emphasize your ability to adapt and learn.

I had previous IT helpdesk and Network Administration experience that showed that I had to learn technologies on the fly and references from managers who agreed that I was surprisingly good at picking things up. Don't count that route out if you have difficulty finding a programming job.

Good luck!

hyprsleepy
  • 141
  • 1
  • 2
  • This also assumes that you know the basic building blocks and theory. The theory is what allows you to adapt to any language because the ony thing that really changes are the built in libraries and the syntax. – hyprsleepy Sep 15 '10 at 20:42
5
  • Don't sit on your computer all day/night every day trying to get better. You will burn out fast. I did this, then had to stop programming for about 3 months as I just couldn't care less about it.
  • Read some books, and pace yourself.
  • Learn something mainstream (c# / java) to program in, as there are jobs and knowledge in these. Not VB though. That is evil. (Read fanboy comment below)
  • Do cause problems for yourself and then try to fix them in your language. This is the core of programming. Often these problems come from doing something apparently simple. So do something simple!
  • Learn basic unit testing! This is the fastest way to get better, as your problems become better understood as you learn to break things up into small pieces
  • Realise Fan boys are biased and fairly useless for opinions and that everyone is a fanboy.
Dan
  • 487
  • 1
  • 4
  • 6
5

I think that many students have been told fairy tales: get your diploma and you would get a job quickly.

That isn't true any more as IT market is becoming industrialized. With outsourcing it will be all the more true in the future.

So you will have to acquire really good skills to be able to survive in this job or compensate with other skills like management skills.

That is my case, I'm not really a technician, I rather manage projects (but to take some decisions I code sometimes for proof of concept); but management is rarely for beginners so you'll have to get a technical job then later target management.

That is if you are just average technically like me you'd better switch to something less technical otherwise you'll be rather incompetent or not competitive enough.

Problem is there are many more average technical people so it's not so easy to go elsewhere either as it is very crowded :)

user310291
  • 121
  • 4
5

Target where you want to be and what you want to do in 1 year. Focus on learning those technologies and start and complete a 'cool project' with those. Promise yourself that you'll release the project with X,Y, Z features. Purchase Code Complete by Steve McConnell. Learn mercurial (or git) and use it from day 1 with the cool project. Release the code on bitbucket or github and focus on keeping the project moving.

Some other things I recommend:

  • Learn web development and offer some basic pro bono work for a local non-profit.

  • Pick a technology that is in demand.

  • See if you can find a internship. You might be able to swing one since you just graduated.

  • Get a job - any job - to pay the bills. There's no shame in working some crummy job to pay rent while you look for work and polish your skills.

  • Watch Stackoverflow and learn. It's the accumulated wisdom of thousands of man-years. You're not going to beat it until you're, y'know, Knuth. :-)

Paul Nathan
  • 8,560
  • 1
  • 33
  • 41
5

I would suggest you try learning more about object oriented programming. Get a good book on object oriented programming, and actually code the examples, do not just read the book. I think this will help you understand more about what is going on. Another good technique is to step through the code using a debugger, and set lots of break points. Look at the value of the variables as the code executes, it might help you understand a complicated algotrithm.

  • -1 I dislike the business analysis that dont at the very least understand programming. This is because they will come up with some crazy that I have to code someone even though it may not be possible. – Tony May 14 '10 at 15:56
  • 8
    Bob, this is not constructive. –  May 14 '10 at 18:07
  • There may be a lot of truth to this, but throwing bitter sarcasm at a person asking an honest and candid question is, as Jim said, not constructive. Please consider withdrawing your answer. –  May 16 '10 at 02:09
  • 1
    @Brandon: I seriously don't see the sarcasm. Could you explain it? @Bob did you mean to sound sarcastic? EDIT: just viewed the revision history. @Stephanie I suggest you do to. – Ponkadoodle May 22 '10 at 02:04
  • 1
    @Stephanie Page: calling people "jackasses" for expressing an honest and constructive opinion is EXTREMELY unconstructive. As wallacoloo suggests, please read the revision history, so you know what you're talking about before calling people names. I'll include it here for your convenience. Here's what Bob originally wrote, that a few of us responded to: "I would suggest you try business analysis, that is where most IT people who can't code go. Then there is a clear path to project management. Just smile a lot and say yes to everything!" –  May 28 '10 at 19:24
  • 4
    @Bob: kudos for editing your answer, by the way. –  May 28 '10 at 19:25
5

One of the problems with graduating from computer science is that you probably were not trained to be a software developer. While there are some universities that do teach software engineering, most CS courses are not intended to produce people to be industrial software designers. There are zillions of coders out there but the real need is for someone who knows how to design software systems.

Nobody would want a biology grad to take out their appendix or a chemistry grad to design a chemical plant or a physics grad to design a jet airliner.

In the same way, nobody should want a CS grad (who was taught by the science faculty) to design software. That many software developers are CS grads is due to the fact that the alternatives are electronic engineers and people with a masters in Eastern European Folk Dancing (I kid you not). So if you really want to work in software development, learn UML and take a course in Software Configuration Management.

  • 1
    You can do fine in software development without UML. You can not do fine without design skills. Maybe learning UML might cause you to examine design, but you can do the work without the formalisms. – Warren P May 21 '10 at 16:12
5

Before I graduated I knew that the feeling you now have would come to me as well. The last step of my studies was my thesis. I decided to pick up a difficult and practical thesis, so that I would learn how to write code and I would have something I can present to an interview for a job. My thesis was: "Velocity estimation of moving imagery". I used Visual Studio, C++, MFC, DirectShow. I worked hard for 1 year, but no more. The result was impressive. After that I always felt I can develop anything, even though I am a junior developer. Right now I hate MFC and I prefer Java/C# to C++, but the fact that I started with difficult coding made me stronger. My advice is:

Start a big project for yourself from the beginning to the end. It could be a game, or an app or a web app. Develop something big and practical, that you could present to people. In this project you should try to:

  • be as object-oriented as you can
  • use at least one external library. It is important to feel confident about using coding libraries.
  • do something useful, that you will feel satisfied with
  • really finish it, meaning time optimization, GUI, threads and everything. You will never feel confident about your coding capability if you don't have at least one finished job.

Wish you luck

Stefanos Kargas
  • 171
  • 1
  • 4
4

You might probably want to build upon what you already know (Python).

Give this free book a shot: Python for Software Design - How to Think Like a Computer Scientist, by Allen B. Downey (http://www.greenteapress.com/thinkpython) and broaden your horizon towards something more concrete, e.g. web development with Django (http://www.djangoproject.com).

But, most importantly, find a project of your own and start working on it. The only way to learn from your mistakes is to make them in the first place.

4

Ok, I'm just playing devil's advocate for a second here: Do you really have to know how to program to be a good computer scientist?

I'd say no! There are so many fields in computer science where you're not hacking together code from 9 to 5. I admit that these fields are usually also the ones with the highest mathematical influence (primarily data structures, algorithms and graph theory) but also networking, administration, and the whole hardware stuff (CPU architecture, bus systems, SoPC, and so on) are a part of computer science as is the whole design & architecture & project management work.

Perhaps it is because I graduated in Computer Engineering but to me computer science is much more than "just" coding. And just because you think you're a bad coder doesn't necessarily make you a bad computer scientist. I think you just need to find a field that fits you better. Either that or - as others have said - start on improving your coding abilities.

But always remember: without the math nerds designing sorting algorithms that run in O(n log n) instead of O(n²) computer science really wouldn't be where it is today. ;-)

Baelnorn
  • 816
  • 5
  • 7
  • computer scientist != developer –  May 13 '10 at 09:59
  • @andyjohnson: I know. And the OP only mentions the term "developer" twice: when talking about a summer job and as an example of what he could perhaps do. On the other hand, the OP graduated in Computer Science - which is, as I had pointed out - much more than coding. So, what exactly do you want to tell me? ;-) – Baelnorn May 13 '10 at 10:30
  • OP and the rest of the thread is clearly talking about advice for a career in development, not computer science. Thats all. –  May 13 '10 at 10:48
  • Care to explain the downvote? Or is it that SO suddenly redefined Computer Science to only consist of coding? :rolleyes: – Baelnorn May 13 '10 at 13:32
  • +1, good point, and I agree. A computer scientist doesn't have to code. E.g. designing an efficient data structure or algorithm, which will be implemented later, has nothing to do, and is a valuable skill too. –  May 13 '10 at 18:04
  • "Computer" jobs that don't (necessarily) involve coding: Software Architect, Systems Engineer, Software Tester, Tech Lead, Database Designer (sometimes), Tech Writer, etc... (many more) – Ogre Psalm33 Jun 22 '10 at 14:42
4

I've been in the same boat. I left university not really knowing what I was supposedly prepared to do and lacking confidence in my ability to do it. I worked at a Home Depot for 8 months after graduating and it was one of the best decisions I've ever made. Somehow things started coalescing while I was there. Topics and ideas from school began fitting together; I put the pieces together.

Part of the problem with school is that you get lost in the trees and lose sight of the forest. Take a step back, do something different and relax. You've got the toolbox and some of the tools, don't beat yourself up because you don't know everything about them or feel you are missing tools. The missing pieces will come. University isn't just about learning to do something, it's about understanding how to learn. Keep yourself sharp by reading and thinking about problems. Brainstorm ideas on how they could be solved, maybe even write some code (if you feel like it).

You'll still be green when you enter your first job, but your employer should be expecting it. There are junior positions for a reason and the developers who are more senior are there to help guide you (at least they should be). Provided you're open to teaching and not afraid of a little failure, you'll be fine.

Follow your gut. This worked for me, it won't work for everyone.

  • I took an IT support job after college -- definitely not what I wanted to do, but not a bad choice either; I learned a lot from it (mostly about communication, not about computers). I suspect the original poster feels there's a stigma to taking a job like that; **there isn't**. But don't get comfortable! Better to take a kind of crappy job and move on, than a vaguely okay but soul crushing job where you don't move on. –  May 13 '10 at 20:24
  • Good point. You definitely don't want to become reliant on a transitionary job. That's why I took the Home Depot job, it wasn't a position I wanted to be in for long, it just paid for some bills in the interim. –  May 13 '10 at 23:16
4

Read this: Teach yourself programming in 10 years.

Long story short, learning to program is like building a house. A college degree is a foundation. Thinking you know how to program after getting a degree is like thinking you have a house when all you have is a foundation. Therefore, it takes patience and dedication to become a programmer.

The only other advice I have to give is to not limit your curiosity. Avoid thinking in terms of black boxes. Don't say "well, I'll just connect library a library which magically does x to another library that magically does y and that's it!"

You need to understand how they work (at least at a high level). Otherwise, when something breaks, you won't have any clue how to fix it.

Jason Baker
  • 9,625
  • 8
  • 44
  • 67
  • 1
    +1 for the link. My answer exactly to the "I don't feel like I know how to program." It's all about perspective. –  May 15 '10 at 18:59
4

I felt like you once early in my college career, not at the end. My solution was to re-take some classes even though I had passed and allow it to really sink in. In my case re-taking was a simple choice because I only had 2 classes to retake. In your scenario you would be considering re-taking an entire college worth of classes.

While I find your lack of confidence unfortunate, the only advice I can give you is to: A) Ask questions (this is easier when you're in school as you have someone dedicated to you that by job title must answer your questions).

B) Practice writing programs. So you don't know how to write a website. Do you know how to write a program? If so, think of something interesting (like the previously mentioned video game) buy a book if necessary, but sit down, learn what you need to implement it, and write something. Then when you've written it, re-write it in a new language, perhaps one of the more alluring languages that employers are seeking.

C) If you can get one, get a job. When you get there and you're new, don't be afraid to be real with your experience from the get go. Tell people if you don't know what you're doing when asking for help (even if you feel stupid doing so) and do it early on.(This does not mean run around telling everyone you're an idiot - it means be honest with your skillset when you ask for help, it will allow the developer to give the amount of detail necessary to teach you the concept). For one, you'll be a new hire and most questions will be ok when you're new (. If you hide the fact you don't really know what you're doing for a year or two and then you crack and start asking questions, people are going to wonder wtf your deal is. Furthermore when they explain something make SURE you understand it - DON'T just say ahhh ok and let them walk away. If you tell that developer you understand and then he's back helping you on something else and realizes you don't actually still don't know what you're doing on something he already "taught you" - it will not look good for you and it will also discourage that developer from wanting to teach you in the future.

Best of luck to you, the best advice I can offer is be passionate about your studies. This is a very in depth career and a very rewarding one. The more you learn the more you're rewarded and ironically, the more you know, the more you realize you know so little.

4

Feel confident about yourself. Don't give up.

I'm sure you're smart and capable to learn how to program.

danflu
  • 101
  • 2
4

I'm 6 months into my first job after graduating from an IT degree, and what I've learnt in this time feels like it nearly tops what I learnt from 3 years at university.

What worked for me:

  • Find a good recruiting agency and preferably a recruiter who specialises in IT. They are very good at targeting the skills you have towards positions. They also have personal relationships, access to employers that can help give you a foot in the door and local knowledge about the industry in your area.
  • Be prepared to be thown in the deep end and work extremely hard - harder than you ever had to work at university. I'm still doing work at night after working 8-9 hrs because I want to get ahead and prove that I belong here.
  • As others have said, believe in yourself!
Span
  • 101
  • 1
  • Good answer Span, I am sure you have a great career in your future. –  Jun 01 '10 at 12:48
  • +1 for emphasis on GOOD recruiting agency. There are definitely bad ones out there, too. –  Jun 02 '10 at 18:07
4

Well, in essence you are right - you don't get to be a programmer (surely not a good one :-) ) when you graduate with Computer Science. As the title of the degree says, it's a Science and not a practical skill. Computer Science is actually a branch of the mathematics division and most of it is theoretical.

What this degree does give you are tools - efficiently create good algorithms, know how to analyze them, approach advanced fields (graphics, OS, networks...), basics of other areas (object oriented development, functional program, UNIX...) and so on and so forth.

I personally enjoyed my studies. Did it give me anything professionally? Well, not directly. There were times I implemented stuff I learned but my current pay grade and practical knowledge are thanks to my experience and not my degree (which haven't quite yet completed :))

Good Luck!

4

PLEASE READ THIS CAREFULLY!!

I'm getting in on this discussion late. OP, what you have is what a lot of us do not: a degree in CS. That will get your foot in the door. Take a look through careerbuilder--what all the postings list is 'CS DEGREE.' The disadvantage is they're not serious about it, they'll take experience. But if you have the degree, they'll look at you.

That degree gives you two things: you show that you can do the work, that you can do what's required of you for 4-6 years and get the qualification. Second, you have a stronger theoretical background than the clowns you're competing with. I know--I've interviewed them. People are overselling themselves badly. They're sending in resumes saying they've got CS degrees, MCP certifications, and they can't answer basic questions about the language.

Do what the previous posters have recommended and don't despair! You know more than you think you do.

  • I'll add a couple things: atm Objective-C is backing the wrong horse. Occasionally I'll do some data-gathering to see what companies are hiring on. Last one I did I scanned about 70 postings: - DBM's (SQL-Oracle): ~10 postings - Objective-C: 1 - Cold Fusion: 2 or 3 - Access: 1 - Silverlight/WPF: 5 or 6 - ALL THE REST: asp.net –  Jun 02 '10 at 14:41
4
Try and try and you will succeed.

I remember a saying, "no human being on earth is a master but every one is a learner".

For the instant a person says he/she has attained anything that is when a stagnation sets in. Remember a stagnant pool of water is stinky but a running water in a river is always fresh.

So keep on striving for mastery.

4

Great question, Wendy, and SO is a great place to ask it. I wonder how many thousands of CS grads feel just as you do but are too embarrassed to admit it? Everybody on this group has felt the exact same way.

Many have said that the way to learn programming is to program. But how to find and solve a real-world problem? When others are counting on you? When you're facing deadlines and functional specs and meetings and code reviews? You know how hard it is, in your living room, to invent an interesting problem and then write a program to solve it. It's a boring waste.

I was astoundingly lucky to start out at DEC when it was DEC. Nobody was thrown merely into the pool but right over Niagara Falls. It was wonderful in those days: one had to learn and had to deliver. That kind of environment, if I hear you right, is just what you're looking for. I don't know where to find another 1967-type DEC, though. So what's the next-best thing?

The need for developers is heating up again. Projects are starting again. Managers are beginning to panic. There's an actual market again! How to exploit it?

I propose that you get in touch with any of the hundreds of software recruiters that are in the business of contract assignments. I wouldn't worry about a full-time job -- that ain't gonna' happen very soon, as you know. But all kinds of companies will take a chance on a contract programmer, where they don't have to worry about benefits or how you'll work out over the next decade. Instead, they're worried about tasks they have to complete in six months, say, and need somebody -- rather, some body -- to begin yesterday.

Google "contract software development recruiter" and you'll find tons of these guys. Call them up or email a resume. You'll get a call back and an interview. You might end up with a software testing assignment. Or you might get a junior development position. But so what? It's only a few months and you'll finally have some actual experience that you can sell. And you're not stuck in some huge bullpen at Wal-Mart or Prudential Insurance or something, writing COBOL for the next ten years.

I have used Oxford International for years and I like them. There are many other good ones.

-- Pete

Pete Wilson
  • 1,766
  • 11
  • 15
4

The thing about college degrees these days, for the most part, is that they don't actually measure your knowledge of s certain topic. Instead, they give you the tools to think, analyze and solve problems in an efficient manner. I studied Computer Science but dropped out before switching to Technical Communications as a major. Why? Well, because most of the people that were in my computer science classes didn't really get it, or didn't care about programming. They viewed the program as a way to get a high-paying job. I had been programming for 5-6 years before and had read more computer science material in depth than we ever did in college because I love it. It is your responsibility as a programmer (or anything) to continue learning. You do this by trying and failing or trying and succeeding. There is no magic formula for being a good programmer. It's pretty much like anything else; the more you do it the better you will get at it! I also know many great developers that never majored in CS; instead, they majored in topics like English, Linguistics, Music, etc. All you need is the drive and you can learn anything well.

I also noticed that many of the people that were in my classes could not communicate to save their lives. Being able to communicate well in all mediums is very important. I got my first programming job because I was able to communicate well with the interviewers (and I also write all the copy for the site). As long as you can show everyone your skills, at the end of the day you can usually get the job. I would recommend getting involved in some open source projects where you can learn from other great peeps. Also, read "The Passionate Programmer" by Chad Fowler -- it has some pretty good stuff in it.

Best of luck!

3

Graduating from school does not make us experts. It takes about a decade of good work (not just any type of work) for one to become an expert of sorts.

One of the great problems with CS schools nowadays is that they siphon students into a minimal curriculum of 60 credits. Unfortunately, a lot more has to happen for a student to get enough practice to develop a sound base of programming skills (before entering the work force.)

For me, it took me about 1.5 years longer to get my BS simply because I (and many of my peers back then) took a lot more programming courses. The typical student now simply takes Programming 101 and 102 (possibly in Java or C#) before going into data structures. Back then, I took Basic, Pascal I and II, C I and II, C++, x86 Assembly, expert systems, Delphi and Ada before setting foot on a data structures class. I wasn't alone in that.

It was the norm for many of us back then. That is we had 30 credit hours of programming before hitting data structures whereas now a student typically has a meager 6 to 9 credit hours.

This is not counting internships and part-time jobs at the labs (be it tutoring, teaching or programming small projects like reports for a local school department) that we were exposed to.

There was a great selection of programming courses and it was unthinkable not to take as many as possible. Now, all you see are a pair of meager Java courses and a half-ass course combining assembly and computer org (if you are lucky). To me, I don't see how an undergrad can have enough practicum by just following the bare-bone, minimal curriculum. Unless you land a really good job with a really good engineering-oriented, your job won't help you improve your programming skills.

In fact, and this is specially true in the enterprise/e-commerce arena, most jobs are crappy with people not recognizing what good programming habits are even if they landed on their laps and called them "momma". So the saying that one will learn more at work is half true. You learn something, but there is assurance that what you learn is good or bad (there is such a thing as bad learning.)

My advise to people in school boils down to the following:

  1. Take as many programming courses as possible (15-18 credits at least beyond what a CS curriculum requires you.)
  2. Make sure to have more than 9 credits of programming hours before taking data structures. Anything less won't prepare you enough.
  3. Take students loans and eat grass and water if you have to, but do take additional classes as outlined above.
  4. Aim to get internships. Do whatever you have to to get internships on your junior and senior years (preferably with reputable engineering firms and not sh*tty e-sweat shops.)
  5. Independently of whether you get internships, always vie to get a part-time job at a local computer department, be it tutoring, but preferably doing systems administration and networking... or if you are lucky, programming reports or sysadmin utilities for internal usage.
  6. Network, network, network. As professors for potential employers, employers they can recommend.
  7. Take Calc III and DEQ and/or take a introductory course in EE/CE. It will open a lot more doors beyond what the enterprise has to offer.

If you already graduated and feel that you still have a lot to learn (and on-the-job training and work exposure are not cutting it), go back to school, get a MS or get professionally certified (.ie. Sun Certified). Engage local programming user groups. Read DDJ and the Pragmatic Book series; books on Architecture; on algorithms and concurrency; on security, e-commerce, distributed systems; on requirements analysis and engineering; on systems engineering (actual systems engineering as delineated by government agencies.)

Recognizing that you need to improve your skills after leaving school is 90% of the battle. Most people never recognize (or care). But you do. All you need is to sacrifice time outside of work to develop your career. Your job is never your career. Remember that.

luis.espinal
  • 2,560
  • 1
  • 20
  • 17
  • Your answer sounded credible until you mentioned DDJ. Really? Is it still relevant? ;) – Huperniketes Oct 15 '10 at 20:18
  • I've found some excellent material in the DDJ site every once in a while, plus announcements for courses and seminars such as the ones on parallel computing at University of Illinois. There has been other valuable articles covering technologies in Java, concurrency or non-relational databases as other examples. DDJ is not what it used to be, but it has still value. In the end, it (like any other resource) is whatever we make out of it :) – luis.espinal Oct 16 '10 at 00:05
3

I have started my career 3 years ago and, was 6 months at home after my post graduation. Nothing to do. I never liked programing but finally I have to do. I then decided to start with C# as .NET was everywhere. So I opted a very simple book from Dreamtech Publication of an Indian writer. That helped me a lot in building C# fundamentals. Later on I asked some more guys who were in programming, some suggested Wrox Beginners and some Complete Reference, I then bought Complete Reference as its language was very easy going with lots of examples. Later on Apress Pro C# 2.0, 3.5. And still I am learning and wants to learn a lot.

To begin career in Programming, you need a good logical and analytical sense. Everyone has the two things but are in deep inside. They come out after a long hour of practice and the most important the dedication and interest while practicing.

To make a start, I don't suggest to start with creating games or website. Instead start with basic mathematical calculations like algebraic, trigonometric, based on your mathematics books. This will help in building algorithms logically. You can also develop your skills by following algorithms or pseudocode instead of jumping into actual programming.

Regarding study materials or reference from the books, if you are Non-English guy like I am an Indian and but I know English too, what we do here is generally we start with books of our Indian writers as they use pretty simple English that is commonly used in our day to day life. Or if there is book in your own mother tongue that will be a better [but we don't have any C# or VB.NET books in Hindi]. I hope programming books must be published in language other than English too.

When we have enough knowledge to move further then we opt the Foreign Writer books on the basis of their contents. Generally guys like me do this. Most guys begins with books like WroX, Apress, Microsoft, etc. too.

So this was mine staircase of programming career, hope this will help.

See-Sharp
  • 101
  • 5
  • Mathematical skills will only take you so far. What's more important for many developers these days is how to meld business and programming. You can't just be a code-monkey and expect to have a good career out of it. –  May 14 '10 at 13:57
3

I was recently in your situation - I graduated with a degree in computer science, and relatively low confidence in my programming.

Getting the first job is going to require good interview skills - and write a good cover letter. Also make yourself a decent portfolio and hand that in with your application.

To get confidence - build your own software, from design to creating the installer and beta testing it. Following the development cycle here will prepare you for the workplace.

Once you start working - the confidence will come in quickly enough.

Don't worry about learning algorithms, you will learn them as you need them. You also need to consider your employer will most likely allow you to use the internet as a resource - learn from tutorials for specific problems.

If you want to increase your odds of getting a job - familiarize yourself with the .NET framework, with C# or Java. Object-oriented languages are in high demand and employers like using them because of their high productivity potential.

Until you get a job your job should be building your portfolio. Just keep adding to it, building different solutions and testing them.

Don't worry about getting a job either - you will get one, the industry is still growing rapidly and we need all the developers we can get.

3

A few things: a good Computer Science (or any science and engineering) program should not really teach you how to program, but how to think and solve problems. "Programming" is an unbelievably huge topic with dozens of languages in use (hundreds of niche ones), dozens of platforms, a constant moving target of technologies (web, db, mobile, linux, embedded, game, scientific...). You will NEVER feel like an expert if you compare yourself to what people are saying on the web. There is just too much to know! No one knows it all!

  1. So, for finding a job, I would suggest crafting your personal "story" about how you learned to think and solve problems, communicate your thoughts, etc. in college. Every company has their own unique flavor of programming and areas of specialty. You will NEVER be fully qualified to start working at ANY company, and no one expects that. Instead, they want people who can be trained, are pleasant to work with, will "fit in" with their corporate culture.

  2. Don't work on your own as a substitute for working for another company. Any new graduate needs years of surrounding him or herself with people from whom they can learn. When interviewing, it's a good honest strategy to tell them that you want to learn from them.

  3. Learning C is important. If you can write good C code, you'll pick up any other language they throw at you. My mentor in a high-school internship told me that in order to be a C programmer, I had to be able to write a "linked list", add, remove, and find objects in a list. Learn to do this in C in your sleep and you'll be as good a programmer as anyone!

  4. While looking, spend lots of free time just writing little programs, working through examples, reading books (and when you read a C book, work through EVERY example). Don't bother with Kerningham and Ritchie (they wrote "THE Book" on C, but it's outdated).

Don't get frustrated. You picked a bad year to graduate.

3

Try not to get frustrated after just one month of job searching.

Your math and CS training are a great foundation, one I wish I had (my degree is in Russian). However, fortunately for people like me, most commercial programming doesn't involve algorithms.

Learn assembler and machine code. All other languages are just syntax.

Unless you're really creative and passionate about something, a hobby project won't do it. Find a non-profit (church, fire company, local government, etc.) that wants a web site and build it for them. In addition to learning HTML, CSS, SQL, and .NET or Perl or PHP or Ruby/Rails ... you'll learn how to deal with customers, and their specifications and expectations (which are rarely related). Some of these organizations may actually pay you. Remember that a programmer is never really unemployed; s/he just becomes a consultant.

Get a job doing anything in IT at any salary; show them what you can do; learn.

Nobody writes applications from scratch any more. Learn from others. Besides, it's not efficient. Whatever library or framework you use won't do it exactly the way you want or need, so you'll have to code around it anyway.

This business never stops changing, and you should never stop learning. Most of what I have written in over 30 years of programming is long since obsolete. I started with COBOL and JCL, moved to PL/I, then Assembler, then C, with some APL, BASIC, Pascal, Java and others along the way; not to mention a host of scripting languages. By far, Assembler was the most important in the long run, although I haven't actually used it in years.

It's true that, unless you're applying only to Google, Microsoft or somebody who develops microcode, firmware or compilers, once you've been in the business awhile, nobody will care that your degree was in music, or even that you have a degree. Certification is overrated, and very soon outdated.

"... in 5 years you'll realize that you know nothing" -- best one yet

Take as many interviews as possible: practice makes perfect. Research the companies and make the interview a conversation.

Read and heed all the other advice in these answers.

3

I believe you won't get any where if you keep on thinking like you are now, look the world is not finished if you couldn't understand developing iphone application or couldn't understand some of the hardcore algorithms, but you did at least understand some right because after all your are going to graduate in computer science!

Oh do you remember when you were a kid in 2nd grade and you though how the third graders knew division or what ever else for that matter, it was because they passed the first and second grade, so everything comes gradually. not in 1 day learn how to be patient, at the same time have some dedication.

Computer science is a huge subject(networking, programming, grpahic designing, imaging, 3d, cnc, cad/cam, embedded systems........). Do your self a favor choose 1! I chose web development and targeted .net specifically.

I hope I am little bit help and inspiration, Concentration is a big thing if you can be consistent.

Developer
  • 101
  • 2
3

User Groups, Developer Events, Blogs, and Podcasts

I've been working in software development for 10 years and attending user groups is probably one of the best things I have done to advance my skills.

It's very easy to get stuck in a rut where the only code you see is what appears on your monitor day after day. The truth is that there is a large community of developers who are actively engaged in learning and finding development practices that make our jobs rewarding and fun.

Attending free developer conferences such as code camps, give camps, and open-space conferences is a great way to get exposed to a lot of different development paths that you haven't yet explored.

Community Megaphone is an excellent resource for locating developer events and user groups near you.

I would also recommend searching out blogs and podcasts that connect with the kinds of development you're interested in. Podcasts offer highly customizable content and are great to listen to during a long commute.

By the way, you're likely to come across a lot of information and ideas that doesn't necessarily relate to you. Software development is a highly innovative industry and every developer has a different approach to solving a problem. It's the nature of the industry to produce and compare many different technologies and APIs, weighing their pros and cons. Bite off what you can chew and use the "Law of Two Feet" for everything else: If at any time you find yourself in any situation where you are neither learning nor contributing, use your two feet, go someplace else.

Most importantly, don't allow yourself to be siloed. Sometimes you just have to get out from behind the monitor and explore. Good luck!

Technobabble
  • 101
  • 4
3

I resonated very deeply with this post. I just graduated with my degree in Computer Science. The difference is I am already in my career field, writing software. I consider myself very lucky for a few reasons I would like to point out in this response.

1) Academia does not teach how to program (I would say the greater majority of schools and programs in CS do not teach this). This means the burden of developing skills which are marketable fall on your shoulders in the case of pure programming.

2) There sometimes exists a huge mix match of conceptions: the job market expects you to know how to program because "that's what you learned in school", and Academia expects you to learn how to program in your career because "that's what you'll learn when you join the work force". At the end of the rope, your left there holding the burden of bridging those gaps.

I just graduated, and for all I'm concerned I could have written the very topic you posted here 2 semesters before I graduated. What no one tells you, is that your last year in your CS program should be 80% bridging that gap, and 20% staying in tight with Academia. That way when you leave your school with your degree, you don't feel overwhelmed with the next step.




Here's what I did, some of it may help, and some of it is advice too late:

1) Write software every day. Pick a language and master it. It doesn't matter what you write, as long as your writing (at first). During the last year in school, you should be working on your portfolio of computer programs you have written. Write a calculator. Write a CS-related calculator with conversions and helpers. Write a text editor. Keep writing every day. Spend about 2 hours a day writing, and more on the weekends if you can. Grab something simple and extend/build on it (write your calculator, then try extending it to have a "CS Mode" for CS-specific functions). The bottom line is that your trying to master a language, and you'll run into issues of software complexity and the inherit difficulties associated with managing complex software. Writing games are great (I did one using OpenGL and JOGL bindings), but just focus on writing lots of software and seeing it through.

2) Find an internship, and start it ASAP. Find a mid/large corporation with some flexibility in their internships. I say mid/large because typically they can afford to hire on inexperienced interns to do some cheap coding. While your there, you will want 2 things out of it: expand what you know about the art of programming, and plant seeds which may grow into a full time job when your graduated or when your ready (network and make relationships). This is what I did and I got an offer to come back full time after I graduated (the bridge was built). I still consider myself lucky though, because the management at the company I work for understands the dilemma and misconceptions some businesses have and what Academia thinks. I just showed them I was very willing to learn and work hard. In the end it's passion and work ethic that drives you there - period.

3) Join school organizations. I joined the student chapter of the ACM, which held monthly talks/speeches from businesses in the job market. When they gave their presentation (almost always software/coding related), the small number of students and the direct employer/company giving the presentation gave excellent opportunity to network directly and possibly skip past needing an internship.

4) Focus your talents during interviews on what you know well. When I interviewed for my internship this meant some Automata theory and Mathematics. Show them you have a brain, even if your lacking coding skills (which are generally developed over a long period of time, not learned in a class room over 1 quarter or semester).

Don't get discouraged, just find the passion in programming and focus in on it. You'll be fine in the end. Focus on your strengths during interviews, and expand your knowledge about CS/programming as much as possible.

Jack
  • 261
  • 1
  • 4
3

Ah, I felt the same way when I graduated 2 years ago. I didn't go to a great school. What I believe helped me get a good job was that I developed small programs to use a specific library or function that seemed to be useful. Being self motivated worked pretty well....

C# is my preferred language, I always want to use and understand the new functionality in each new .net version, or just be aware of this new functionality and know at a high level how it can be applied, once you see a problem that can be solved by this, use it. Some books (that I read thanks to Jeff Atwood) are Pragmatic programmer and Code Complete, these books really helped me be a better programmer, while another book, Design Patterns, helped me understand higher level solutions to a problem.

As a lot of people say, that best way to learn to program is to program. There are some pretty good sites that provide tests that can be solved by programming (Euler project for example). Google has been a great friend in my career.

As for getting a job, I was lucky (or unlucky) enough to get hired by a programmer sweat shop... being in this environment really really taught me a lot of coding standards, ways of working out a solution, and it actually helped me find my burnout time. Once i left there (underpaid, overworked) it greatly build up my confidence; I am not the best programmer (and every time i look at my old code I get reassured that I really am not the best), but i believe that I can get the job done.

Remember that it is a lot easier to make mistakes while your young, you have more time to make up for those mistakes, so.... make them!

Hope this helps you. (it made me realize what has happened in my career these past 2 years).

seFausto
  • 101
  • 2
2

Nobody graduates as an expert and that's true for anything, not just programming. You study to know the basics but by working is how you gain real competence. You might become an expert programmer if you do it from 3 to 10 years. In few months you can expect to be able to do something useful. There's no rush and it's a slow process for anyone, so don't worry about it.
In my opinion you really can't demand newbies to spend all their time learning at home. Of course it can speed things up, increase your value and make you more confident, but only if you want to. Otherwise I'd be happy to learn at work.

Carlos
  • 1,479
  • 1
  • 12
  • 17
2

Khilon's answer is what I was going to answer but with an extra clarification; in my view, graduating with a degree in computer science or engineering or any other discipline qualifies you to begin your apprenticeship in your chosen field.

We don't have formal apprenticeships in the software development field but ideally, during the years following your graduation, you will learn lots of techniques that will help with the final goal of delivering robust code that is maintainable, possible to debug, predictable, understandable by others and generally reliable. This includes topics such as testing strategies, build management, configuration management, version control, defect tracking, quality metrics etc. etc.

If you understand computing theory, complexity theory, algorithms etc. then you will have a strong BS detector which is one of the great things that you get from a good degree. If you can then work with a good team that understands the engineering aspects of software development then you will have a very good combination of knowledge.

PhilDin
  • 171
  • 3
2

There is a path to learning everything. It is normal to feel like that at first. But it is not bad. Keep trying new things. You say that you lack some confidence but to improve you need to go out of your confort zone. Try doing it in controled and small steps but avoid doing always things that you already know.

How to be an expert is a good read.

2

Start writing hacker news. Use python or php, and don't stop until you've done 75% of it. Don't worry about the parts that are still broken, just write out all the features and do one feature after another until you have most of them.

Get a server by signing up at rackspacecloud.com for 11 a month, and get going. Sure, you may not get what a cookie is.

Now I'm going to let you on a HUGE part of our industry: No one knows how to do all the project they have to do in front of them. The secret is learning how to do it by reading about it.

2

I don't have the reputation to comment, so here comes another 'answer'.

timothyawiseman alluded to the fact that many employers value certifications while many in the field don't. Without going into all reasons why that might be, the certification can play a valuable role in your education. Let's take your situation where you find lots of C# and Java work but little in your actual areas of expertise. If you set up an appropriate development environment and pick out a few decent books that are not designed specifically as 'brain dumps', you should be able to work toward a certification and learn a whole bunch along the way.

I have some personal experience with that. When I was moving away from trucker to 'anything in IT' while having nothing more than a high-school education that pre-dated computers, I decided that getting a Microsoft certification would be useful. I picked Windows 3.11 and Excel 4.0 as the most marketable of the bare minimum certifications. I started by sitting for both exams. Naturally, I flunked badly, but that told me what they were looking for. I went out and bought a few books that seemed to address the issues and spent 3 months of part-time but intensive study. When I tested again, I passed with flying colours. The certification helped me get a job and the real knowledge and skill helped me keep the job. The self-training skills I acquired were behind the fairly rapid advancement I made through that company.

I've never done a degree, but the people I know with degrees seem to be pretty good at teaching themselves new things in their field, so I doubt that you'll have any trouble tackling a Java or C# based certification.

2

Don't worry about not being able to recreate Google or Stack Overflow. Most commonly used websites today did not start as you find them now. Take Facebook for example, it started as a simple application for uploading photos of people and rating them (think hot or not). It was only after a long iterative process, developed by many different people did Facebook become what it is today.

If you think about it, very rarely (if ever) do full featured new startups ever become successful, this is because the developers usually over-speculate about what the users will need and this causes some serious design issues down the road (not to mention that actual users were not brought into the process).

Most popular applications and sites start off with a single, small set of simple features that compel users to try it and then as users make suggestions, then you add features to improve the product.

So think small, this should remove the apprehension about busting your chops on some real world stuff.

Your computer science degree must have given you a good place to start developing more specified skills; growing you capacity should not be a problem so long as you keep coding.

roy
  • 101
  • 2
2

Importance of open source


Overview:

I wonder why people haven't expounded upon reading open source code that much here. It is a practice that has been very helpful for me, but then again I am quite a zealot (not as much as RMS though lol). I try to use only FOSS programs and I release all the source code I've written.

Advantages of reading code

  1. You can understand good programming practices, good style, and how to write maintainable code.
  2. You can learn how things work, and there are many other advantages.

What to do

Download the source code of an entirely open operating system such as Ubuntu and spend a day to browse through everything, that will teach you so much about how things work... Just get a general idea of the structure of the operating system, that will be very informative.

If you have any questions along the way, the open source community is very helpful. In fact, you can usually get an instant answer on most of your questions by going on IRC channels such as #ubuntu.

Responses

but I see websites like Stackoverflow and search engines like Google and don't know where I'd even begin to write something like that.

I was in that predicament once, fortunately there is a solution! Check out the source code of some high quality open source websites.

Do you use Wikipedia? Well it is run by MediaWiki which is open source, so you can start there. Ever hosted your code on Launchpad.net? You can check out its source code as well as the source of countless other websites!

little understanding of the mechanics happening beneath the hood.

To understand what's going on under the hood you should read the source of an open operating system!

Since we were talking about web stuff, here are two open source projects to check out: Firefox and Apache.

Links

Launchpad coded in Python: http://bazaar.launchpad.net/~jtv/launchpad/recife-548805/files/9136

Firefox's JavaScript Engine: http://mxr.mozilla.org/mozilla/source/js/src/

Firefox's JavaScript Error Messages: http://mxr.mozilla.org/mozilla/source/js/src/js.msg

Firefox's JavaScript Arrays: http://mxr.mozilla.org/mozilla/source/js/src/jsarray.c

jhuni
  • 139
  • 2
2

Well I'm trying to get a master degree now and I'm not happy either with my programming skills. I know Java and doing web development in interpreted languages is not a problem for me.

However when it comes to something more complicated like a C++ code for a physics simulation (or some more complicated algorithm which involves an implementation in CUDA), I get in trouble and spend hours with debugging..

I guess I still need lots of patience and to gain some more experience.. I'm also hoping to get a challenging job later.

Nils
  • 556
  • 2
  • 5
  • 13
  • I would also like to mention that according to the dreyfus model it requires 10 years of diversified experience in a field to become an expert.. so unless it took you 10 years to finish your cs degree you should not bother too much ;) http://en.wikipedia.org/wiki/Dreyfus_model_of_skill_acquisition – Nils May 13 '10 at 21:59
  • If you think you know Java and interpreted languages after a plain old degree and no professional experience, then you have bigger problems than physics simulations in C++... –  May 14 '10 at 18:29
  • Disagreee Java code is much easier to debug than a complex C++ code – Nils May 16 '10 at 08:29
  • My point was that it takes a lot longer to become a true craftsman at a language than simply a bachelors degree and a few algorithms... –  May 17 '10 at 10:44
2

I believe you can accumulate more experience when you have good imagination in less time.

Imagination is more important than knowledge. For while knowledge defines all we currently know and understand, imagination points to all we might yet discover and create. Albert Einstein.

In other words "With great imagination comes great achievement/success".

Improve your imagination, meet more people, and do more.

THEn
  • 101
  • 3
2

I read all their answers and I see they were great advisers. I agree that learning from school are too basic that most student taking it for granted. But it is important to learn the basics to get to the next step. It's not too late to learn, make learning a habit. Love your job, is there you can find the best answers. If find difficulty, Stack Overflow is here.

2

Experience is what you got by not having it when you need it.

Xaqron
  • 126
  • 3
2

Where is it written that a CS major has to program for a living?

Shawn
  • 101
  • 3
  • 2
    A fair comment. A lot of CS majors I know, who didn't know how to program, ended up working in a call center or flipping burgers. Knowing how to program is *so* overrated. – Cerin Aug 27 '10 at 15:06
  • 1
    I'm simply stating there are other opportunities. –  Aug 27 '10 at 16:32
2

While i was doing my cs degree, we used to ask questions on Diodes,Flipflops,imagining an oscillator converting bits to waves and carrier waves, tcp packet . But the answers from our professors were bookish definitions. What is learned is that, take one thing which interests you, know what it does at the higher level, go down to individual components, know how they work, go deeper and finally run a movie in your mind, while an input is given, see where it flows to program better and efficient.

Step 1. write a program

Step 2. think whether there is any way to rewrite better, consistent and produce the same result.

Step 3. do step 2 until your brain does not come up with any idea or just blank.

Step 4. go out,see nature.

Step 5. come back to the same program, see if you get any idea.

Step 6. google about anything mathematically related to the program.

Step 7. Finally ask somebody if they can write better.

Step 8. if they have better way, learn how they do thought process.

2

I was kind of in your position. I understood all the concepts, I just didnt know how to put them together. So I decided to make an Android app instead of a final, so I have NO CHOICE but to program from scratch. Working on this the past few months has taught me A LOT.

Also a lot of people here mention that posting on Stack Overflow if good practice, I would like to say I completely agree!

Coming form my personal experience, not only do I get my questions answered here, but in my down time I look to look at whats being asked. There are so many times when I come across something where I think to myself, "Oh my, I just did this". This usually results in me looking at my projects for a quick refresh so I can post it here.

After doing stuff like this, really helps me be able to process what I know in a much more clearer way not only for me, but hopefully others.

I golden rule, you know you know something when you can explain it to others.

So yeah, I guess I'm just trying to point out that when people say post on SO and code in your free time, they are telling the truth :)

Jim
  • 392
  • 3
  • 8
2

Like any job, you have to work hard and get experience in the job before anyone wants you doing any serious work. People don't graduate from Law school as an expert lawyer. Doctors don't get out of school and start operating on patients. (Would you want them to?)

There's a good reason why job postings for high level software engineering jobs always want 5-10 years of experience. That means we don't want no n00bs in this job. We want someone who's done this several times before, knows the pitfalls, or, as an interviewer put it to me, someone who has been burned a few times.

The only way around this is to be doing entry level programming for a side job throughout school. This is common in my field of indie development. A lot of guys I know actually end up dropping out of school when they realize they're already pulling in huge salaries after working 3 or more years during school (or simply working for themselves).

Ken
  • 793
  • 3
  • 7
  • 7
1

Remember that the science of computing is not the same as developing software and so for most comp-sci degrees I would expect there to be a large discrepancy between what you learn and what you apply (and how) in the real world. But its not that important. You'll learn what you need to on the job, and, if motivated, off the job. One of the things I love most about programming is that I'll never run out of stuff to learn.

Chris Knight
  • 702
  • 5
  • 12
1

It is the same way as with a drivers licence. Mastery takes much much longer....

1

Come up with some simple ideas on your own... anything really, e.g., create a digital clock or an image viewer.

At your stage, it doesn't particularly matter which platform you go for; one of the most accessible platforms is Microsoft.NET and Visual Studio Express.

Then I recommend buying something like C# Microsoft Visual C# 2008 Step by Step (I learnt from the equivalent one in 1998).

Go through the lessons, then go back to your original idea and try to develop that. As you go, you can ask very specific questions on Stack Overflow.

Rome wasn't built in a day. It took me 2 years to become any good. Avoid working for as long as you can! (My parents supported me, whilst I pretended to do college work, but really I was doing software development!)

Let your passion guide you.

1

Depending on where you live, the job market can be extremely frustrating. That goes for any profession. I'd say try other cities and see what you can find. Just hang in there. Lots of uncertainties at graduation and just remember that it's your first time out in the "real world" so give yourself some slack and don't take it too hard on yourself. Also, don't misjudge how much you learned. Just go with what you have, and always find room for improvement based on what you know.

1

I felt the same way when I was finishing up school. Get a job and fight to keep it. You will learn a TON from programming 9-5 every day. It can be hard finding a job but good interview skills can get you a long way (that and NOT technical knowledge got me my first internship). The fact that you at least have some experience puts you ahead of a lot of fresh graduates in the job market.

Abe Miessler
  • 635
  • 2
  • 5
  • 13
  • This was exactly my experience when I've had internships. Talk about a paradigm shift when entering the workplace. Some experience with Unix or Python can blossom into a great understanding far faster than one might think when it's your day-to-day job and you're faced with actual, practical problems. –  Jun 22 '10 at 20:03
1

Unless your CompSci program was woefully negligent you probably know more than you think.

What you lack is experience applying it. Early on, development does feel a lot like gluing other people's libraries together. That's a good place to start. Eventually you'll want to do something the existing libraries don't do - and you'll crack open their library and take a peek at how they're doing things. You may improve it, you may even submit back a path to them. With each step of enlightenment like this things get easier.

You have under your belt, one would assume, 4 years of classes teaching you all sorts of things - you'll probably find that knowledge unfolds as you need it and get enough experience to understand how to use it. But you can't expect to dive in and understand everything all at once. You definitely will need to cast the net out wider than just your immediate hometown to find opportunities but they exist. And they understand as a new graduate you have knowledge but not experience. A good firm will find ways to leverage that and make you feel confident about your abilities.

You may even want to consider entering in other areas of the tree like QA, where you'll get a chance to work with applications and try and break them. This will teach you how to perceive what's going on behind the scenes, write quality bug reports and deal with a production system and development cycle. Just make sure if you go that route you make clear to the place you apply that your goal is to be a developer. They may be able to make use of you as such and give you a chance to move sideways into their dev group.

1

I "really" learn to program in one course "Data Structure and Algorithm". By the end of that course i had 123 small C++ programs on my hard drive.

These programs include programs with few lines of code to complete applications. Prominent programs were:

  • Several Maze problems (With Recursive and Non-recursive implementation)
  • MS Paint clone in DOS
  • Breakout clone in DOS
  • Minesweeper clone in DOS
  • Several April fool jokes for example on program when executed run in full screen DOS mode and simulate formatting of hard drive.
  • Several simple command line Math tool (Simple equation solver, Matrix manipulation)
  • Several File manipulation program written to itch my scratch for exmaple organizign my picture collection based on file pattern in a some sort of directory sturcture.
  • Lot of simple programs to calculate different sort of math series (Fibonacci, Look-and-say, etc)
  • Lot program to render different shapes with and on command line (number pyramid, Squares, diamonds, etc)
  • And lot more ...

I since than worked on different platform, languages and solved complex data problems. But i never have felt i had got chance to work as hard as i had in that one semester.

Yes i failed rest of the courses in that semester, except for Data Structure and Algorithm.

1

Props to this very genuine question. I've encountered kind of the same issue (corporate programming job) not meeting your needs of trying to grow as a programmer. As someone already mentioned, if you're not working at a start-up, researching a new technology, or building features from the ground up, changes are you're probably not going to be doing really "exciting" creative stuff, the stuff that requires really analytical thinking of algorithms and use of data structures.

At my current entry-level web dev analyst job (I'm a Sophomore in college but on a break), MOST of the stuff we do is fix bugs, work with templates, "glue" existing libraries (that can have up to 10 years of lifetime) to make a web channel, etc. Managers generally don't encourage experiments on existing stuff. Why would they? Result and meeting deadlines is way more important than an elegant and efficient solution, especially when it's an extremely high traffic website. You should be at least glad that you had some real world experience before graduating. Having exposure to teamwork is really important too. Since I'm not doing the things at work that I ideally want to do, I'm forced to do little projects in my own time.

Now with the World Cup approaching, my coworkers and I are working on a "sweepstakes" website and trying to get as much people in the company involved. It's fun, people will be using it, and there will be rewards. You can learn a ton from simple things like this.

chiurox
  • 1,498
  • 12
  • 17
1

Computer science is also not really that much about programming. Computer science is mostly a subfield of math about the computational power and about the theories of all stuff you need to know in principle. Many people always wonder that you really don't know that much programming skills in computer science. It is a common missunderstanding that computer science is about programming.

Of course, most jobs and work you want to do with such a degree is about programming. Most companies know that when you come from a university with a CS degree you often don't really have that much experience.

The point is, all this knowledge you got in that degree is very useful and in my opinion even very important to become a good programmer. Also you will probably learn much faster about a new programming language, about some new programming paradigm or whatever other new than someone without that knowledge. And this is an important skill (to be able to adapt fast to new things). So even if you lack some experience, your skills are of some value. Companies also know that. Lacking some experience is probably a bad thing for a company who is searching for someone who can just start right away and don't need some time first to get into it.

I am not sure how you plan your future. If you want to get a job right away - just try it. It is not uncommon in your situation to not have that much experience yet.

Otherwise, if you want to get more experience: Like most people said here, just code. And also adopt to some new architectures - you will learn a lot by that. For example write some application / game / whatever and try to port it to all major systems like Mac OS X, Windows, Linux, maybe other Unixes, maybe also iPhone / Android (not that hard actually). Get used to tools like Git or SVN. Also get used to work in a team. If you don't find people to join you on your own project, maybe just join another existing project yourself. Most Open Source projects can really need help and you will be very welcome.

In can also make some advertisement here: The OpenLieroX project can also need some help! :) It's a 2D game, kind of realtime worms shooter. It is written in C++ (kind of big source code base already, about ~300k loc), uses SDL, OpenAL (and other libs) and supports Windows, Linux, Mac OS X and a few other systems. Also has multiplayer, is fully multithreaded, some some artificial intelligence (for the bots) and has a lot of more stuff inside - most of it very usefull knowledge. You would learn basic graphics stuff, multiplayer/network, how to write in a portable way, some AI knowledge, how to manage such a medium big project, how to work with Git, etc. (After all, a game is some really good project to learn about really a lot of different topics all at once.)

Albert
  • 101
  • 5
1

Maybe programming is not what you're cut out for? Maybe you ended up doing CS, drifted along and assumed things would work out when you qualified, college was fun after all. However much of a failure you feel now you'll feel a lot worse if you're stuck in the wrong job ten years from now. You may feel old now but you're not, you're still a kid and it's not too late to change tack. Work out what your strong points are, find what you love and do that. You might even end up writing domain specific software for your chosen field. The main thing is not to be afraid to think outside programming altogether.

kjack
  • 101
  • 2
1

Lot of great advise. I would add: Learn SQL. I mean really learn SQL. Learn how to dig data out of a database. You don't have to be a DBA, but you need to know how to make queries, views, and stored procedures. The different types of joins, how to get data from a Many to Many join. Learn Oracle, MS SQL Server, and DB2's idiosyncrasies.

Write someone an application. Any non-profit organizations that need help? But write something. It becomes part of your resume and if you're unemployed for a while you have something to show for your time.

1

I was in exactly the same boat about a decade ago now. I spent the whole summer after I graduated, about 4/5 months looking for a job. Eventually a small firm hired me to do classic ASP work. From university I had acquired C and Perl skills; I've never used them again.

The most important thing is to keep your interests up I find that most people will learn some new skills based on what is required for the job and if you have a fundamental interest in learning how to program that will take you a long way. I've moved from classic ASP to .NET to SharePoint development and now from PHP, MySQL to programming Word 2007. The technology will always vary.

Finally, you say it will take you a decade to learn from that book but some people don't even learn that in a decade. Persevere and eventually I hope you'll find a job that is fullfilling and will confirm that you are a programmer.

Chin up.

1

I had a similar issue, and went 8 months without finding work. It can be tough, but just persevere. You may have to take a lower paying job as a stepping stone to build experience, but I agree 100%, make that 1000% with others who say you have to program on your own for practice, even after you have a job.

Other things that helped me:

  1. Join a users group. The experience is great, you get to see free talks from some really talented people, make connections, and sometimes even win free swag!
  2. Go to local seminars/code camps. While the big ones like Microsoft DevDays, or whatever, are insanely expensive, if there is a good users group in your area, they often put together free seminars and code camps. The Code Camps are especially great. There happens to be a branch of Microsoft a couple hours away from me, and they put together amazing code camps in conjunction with the local users group.
  3. Get a subscription to Safari Books Online. 10,000+ books and videos (and counting!) for about $40/month. I've gotten my money's worth there many times over. Any computer book/topic you can think of is there.
  4. If you are more of a visual learner, there are also video tutorial sites, but they tend to vary in quality. Do some research first before purchase. I personally use Tekpub and LearnDevNow.
  5. Read Blogs. I have learned an insane amount of stuff from reading blogs from really smart people.
  6. Learn Design Patterns and SOLID principles. Actually, this should be number 1! Look up "Uncle Bob" Martin. Also, Head First Design patterns is a good book for learning, and available on Safari Books Online along with the original 'Gang of Four' design pattern book, which is a tougher read to begin with, but the classic text in the field.
  7. It takes years to really learn programming intuitively. Don't be afraid to make mistakes, that's how you learn. Refactoring code is an essential skill, because it's rare to do it just right the first time.

Hope this helps.

--Alex

1

A Computer Science or CIS/MIS degree does not a programmer make. In my opinion a College Degree doesn't generally teach you things these, but it does or should have taught you how to teach yourself. Your skill grows with experience. I would suggest that sitting down and writing actual code will make you a good programmer.

If you don't know how to do something hopefully your College career has given you the skills to ask the questions or do the research that will give you the answer.

I graduated College with a CIS degree, and the only job I could find at the time was writing device drivers. It was a painful experience, but one that ultimately increased my ability as a programmer. Just stick to it and don't quit, and in that path lies success.

1

The best answer I can offer is a reference back to Stack Overflow's own CodingHorror's blog. Just start writing code and it doesn't matter who it's for. Do some pro bono work for a charity. Work on Open Source Software projects. Develop your own site or application, especially for mobile these days. As someone that has interviewed and hired developers of all skill levels, I'll tell you that all of those things count.

When hiring, I'm looking for passionate developers that can work well within a team. If you're going to be writing enterprise software, your softskills matter as much as your coding ability. Don't give up and don't worry if your first (or first 3) job isn't your dream job. This is an industry that understands the value of experience.

Above all, be aware that career security is the only way to stay ahead of the game. Job security means nothing in the end. Always be learning, the rest of us are certainly doing that.

ant
  • 101
  • 2
1

Wow... a lot of interesting comments most are good.

I learned programming all by myself that does not mean you have to. My son is going through college and about to finish. Finding a job is always hard when you first graduate.

When you did the simple programs during class did you like them? If you did at first then you might be in the right place, if not look into doing requirements if you like typing documents.

It sounds like you want to learn more since you did not like the iPhone experience of just gluing things together. That is a good sign not a bad sign.

Next finding a job depends on if you are in a Large city or living out in the country.

Learn HTML by creating your own little site. Pick a web language... (PHP, ColdFusion, DotNet) Build a few simple sites.

Take ANY web development job or programming job that will offer you a job. Do not worry about $$ at first. Your goal is on the job programming. It is hard to program at home on your own project. However at work when you are required to get something done you tend to work much harder and if you find it is not fun pick a different IT carreer. It does happen.

Take ANY job... you will learn... if you like it you will overcome.

I never felt like I knew how to program, that is a very good sign. I hate working with those who feel like they know everything they tend to code very badly and do not document anything they do.

I hope my comments help you with all of these other great comments.

1

You get to begin your software development career with a foundation in computer science and a degree to show for it?! How awesome!

While you may be concerned about finding a job and not having the requisite skills for software engineering with a CS degree, imagine being in the same place without a CS degree. That's exactly where I was a year ago.

I cut my teeth in programming by creating monolithic macros in Excel and Access using VBA and managed to pick up a little SQL along the way. About a year ago, I decided I wanted to begin a career in software development, but I couldn't imagine how I would find a job without a CS degree (I have a BA in philosophy, of all things) and with zero "professional" development experience. Who in their right mind would hire me?

I decided to focus on getting a job whose focus would be writing business applications, so I decided to hone my skills in .NET and C#. Before 9 months ago, I had never written a single line of .NET code. But I dove in; and I got in over my head; I struggled; I went to as many user groups as I could find; I read blogs about coding; I embarrassed myself (and still do) on Stack Overflow; I listened to tons of podcasts just so I could become familiar with what is out there. Still, I felt behind, but I had finally gotten over my fear that I was unable to do something.

2.5 months ago, I landed my first job as a professional developer (I wrote about how I found the job on my blog, in case you're interested). I'm now coding in VB.NET, VB6, and javascript and continue to learn tons about programming every single day. But if I can find a job without a CS degree, I am confident you can build up your skills and find one as well.

1

I don't know if this will actually get read, but I feel the need to sill put it out there.

College did not teach me a whole lot. Some basic programming and data structures. Nothing mind-blowing. However it did show me how I learn best. I learn by doing which is in line with a lot of the posts here. I also learned that I like to create stuff via code much like a wood worker likes to create stuff out of wood. So between those two things, I took the time to do something to learn it.

An employer knows what they are getting from a college graduate. They know that the graduate does not know a whole lot. However some employers love that because then they get to mold the new person to their culture and mind set. They will teach you the ropes to get you rolling. Just be ready to learn. This has its ups and downs.

Don't sweat it. The IT industry was one of the least affected by the recent downturn. There are jobs. The company I work for just hired a bunch of new graduates. The trick is finding them.

Good Luck.

Tony
  • 1,154
  • 1
  • 8
  • 11
1

You have just expressed what I feel for my own. I'm almost graduating in Computer Science and as many of us I've just learned theoretical algoritms and developed very few interesting projects. But as Keith Nicholas said

I find the people who tend to do better are the ones who early in their careers put the effort in to develop their skills in their own time. Usually because they are genuinely passionate about software development.

I missed this important point and I've just done what they've asked to me to do at the University. It will be the first step I'll move into.

For the moment when I try to do something more I feel again as well as you said:

I felt like I was mostly gluing together libraries that other people had written with little understanding of the mechanics.

I'm grateful for your post and for many answered, advice and links they wrote to "us".

1

Check http://greatmaps.codeplex.com/. In the beginning I had no idea how to do it ;} So you do it simply by doing it.

PS. I have no 'official' degree, time waste.

1

+1. Interest is very important, and coding sometimes need more patience!

Fisher
  • 1
  • 2
1

Keep in mind two things:

  1. You don't learn how to program (applications) in a Computer Science program. Real life applications aren't one week or two week "bite sized" homework problems. It takes a lot of planning and coordination to get a real life application up and running. It's a different mindset than what you're used to, but trust me you'll get there.

  2. Maybe things are different now; but when I went to university only two or three of my professors actually worked as programmers (undergrad AND graduate). So perhaps you feel unprepared for application programming because you were taught be people who never worked on real applications. That's not to say that what you learned is useless... there's a lot more to creating applications than programming. It just means that you still have a lot more to learn. And that's OK, you're entering a field where you never stop learning.

1

Just keep on learning and you will gain your confidence :)

1

I'll be in your exact same boat my friend in about a year (graduating roughly 2011/2012). While our school teaches development in Java, I spend a lot of my free time reading up on other languages such as ASP.NET, PHP, Ruby, TDD, MVC, DDD etc... because I just love it. There is something about the ability to take code, and mold it into something that can potentially help millions of users, while making you money. Its like an art if you ask me.

You can only get better with practice. At any given time I have web projects, winform projects, WPF, and more projects going all at once, so I don't get bored. These projects don't even have to be marketed products (but they potentially could be). They are mainly to help me learn different technologies.

Good luck to you!

Jack
  • 101
  • 3
1

I'm another one who's going to recommend getting stuck into a personal project or two.

I personally have no official programming qualifications whatsoever, apart from a couple of undergrad programming courses for non-computer-science students - my area of expertise is actually in mechanical engineering.

The reason I mention this is because I'm actually currently working as a software engineer for a large research organisation, where programming is my one and only responsibility. How? Because I picked up a phenomenal amount of experience simply programming as a hobby. I can't stress enough how much tinkering in my spare time has helped me land my job.

What I'm trying to get across is that what you'll learn doing actual programming is one of the most valuable experiences you can get - and it doesn't matter whether it's part of an official course, or simply messing around in your spare time.

That's also not to say that what you've learned as part of your course isn't important - it does form a valuable framework for you to build your experience upon. I certainly know that I'd be much better off with a formal computer science background - I've lost count of how many times I've been stuck on something simple, or lost track of what my boss is talking about, simply because all that was missing.

I think you'll do just fine in the "real" world. You will gain experience simply by working, and any decent employer knows this and will expect no more from you than your best effort and a commitment to learning from your experience. Many employers (mine included) specifically look after their graduate recruits, using mentors and training programs to enhance that experience. And if you feel that you could use more experience, then I heartily recommend doing some tinkering in your spare time.

I'll finish by pointing out that we never really stop learning. You might be just starting on your career, but you will continue to learn and gain experience through your job, your employer, your mentors and on your own. Don't be afraid that you haven't learnt it all yet - there's plenty of time yet to be picking up experience.

All the best with your future career! Hope to find you swamping SO with job-related questions soon!

Mac
  • 147
  • 4
1

Just a short note, something I am missing in the other wise answers you already received. If you do follow the useful advice "do something", I would suggest you make yourself things easy. I like using the joke "walking on water and developing software from a specification are easy if both are frozen"...

So if you decide you are going to "do something",

  • decide what your program is going to do (requirements)
  • which way it is going to behave (functional)
  • how you are going to implement it (technical)

and write it down!

If you change the papers during the play, don't forget to check the cascading consequences.

Have fun and be prepared to be (very) patient.

mariotomo
  • 131
  • 4
1

First, if you feel like you're not ready to be a professional programmer, that's about the right feeling. That's how I felt when I was about half-way through my CS degree, and had I not worked my way through uni, I'd have crossed the stage unqualified to code my way out of a paper bag.

But you will improve your skills fairly quickly and even a bit predictably as you get that first job and start learning from others how this "software engineering" thing is done. The key to success is to understand that you will learn from others, including others you might disagree with or not get along with so well. At the peak of my CS career (I've since moved on to other things), I lead a team of 12 developers for a major software vendor. All the new hires thought they were really smart. The ones that listened advanced rather well and the ones that kept thinking they were really smart didn't.

But enough of that. Let me share with you my observations after 31 years in the software business.

When I first started, I slung code. And that's pretty normal -- most of your assignments in uni were probably very small and that's what a lot of people do with small coding projects. They sit at their computer and they keep on typing until the problem is solved. There's nothing wrong with that and if you develop some good rapid prototyping skills, the ability to sling code will pay off well in the future.

After about five years I had a fairly large body of work -- some of it had been open sourced (we used to call it "public domain" -- sticking a notice in the source code that says "this software is in the public domain"), some of it was "No commercial use" or "You can do anything but sell it." There was no GPL. But what I learned after about five years is that my code stank because I couldn't make sense of anything I'd done more than a few years ago. And from this you'll learn that comments are your friend -- code I wrote in the late '80s had a nice code-to-commentary ratio. Code from the early '80s -- not so much. But this gives you an idea of the problem -- a four year uni degree isn't enough time to learn what you're doing wrong.

After ten years I started needing to reuse my own code in ways I never imagined. Some of the code worked out, some of it didn't, and over the next few years I got tired of reworking my code and learned how to be a software architect. I have code in the open source world that is now 23 years old and some of the original structure is still in there. That is what a good design and a solid architecture looks like -- old code that has stood the test of time, because computers today are nothing like computers 23 years ago. My phone is more of a computer than the PCs I had 20 years ago. So, you'll start to learn how to actually design software, and that's really not something you can learn in a 14 to 18 week CS class that meets 3 hours a week. Right? When I was an architect I'd take months to design the software that was going to be developed in the next release. So, start to look for patterns -- and that's one of the things about object oriented languages that makes them attractive (if used properly). They make you think more. Every time you write something, think about the future.

From years 15 to 25, I lead a team of developers. Some were new hires, some were experienced, and I had to deal with what I had because I wasn't a manager who could go hire just the people I wanted. Somewhere along the line that's what you're going to have to learn to deal with -- different people on your team are going to have different skills and abilities. I had guys with good networking skills, guys with good multi-threading skills, and guys who were just generic developers. The people who moved forward in their career were the ones who got along with others and were able to learn from them. When you get that first job, find a mentor. Don't go for the brightest or whatever, find someone who is senior enough to you that you can at least understand what you're being taught. But whatever you do, learn from others around you.

In the last few years I tired of being in the software business as a business. I still develop software (my current application is about 100KLOC of Java -- all written by myself), but I'm working mostly outside the software industry. It's a great career field, and 30 years was a nice ride.

1

A fantastic question. To some level your question made me think how I was thinking when I was graduating from college.

Since you said you know C and Python, my suggestion will be to start participating in any open source project that uses these languages. Goto sourceforge.net or code.google.com and search for projects that use C or Python. Some projects will have mentors too. The beauty of open source projects is that you can start contributing in whichever part you feel comfortable and grow from there. As you become more comfortable with the code, you can take up more tasks.

Good luck with your ventures. I am sure you will find some nice projects that might need your help. The best part is you get your experience and you can show it as evidence in your job hunt.

yasouser
  • 430
  • 2
  • 8
1

Programming is a tool. Most CS degrees just teach you how to program. It's like learning how to use a hammer without learning how to build anything. If you have little knowledge about a problem's domain you will have a hard time writing a program to solve it. The true value you will provide will be in solving problems, not being a programmer.

After I got a job out of college, I bought many books related to the problem space the company worked in. Now I'm considered an "expert" in an area mostly unrelated to my computer science degree.

1

I think that you should continue to put your effort. Every successful people have gone through this process, i mean what u are feeling rightnow but persistent efforts definitely brings the beauty of mind. Be focussed on a particular problem at a time, search the solution with planning to efficiently utilize your time.

1

I agree with timothyawiseman. Get certified!

I recommend [link text][1]. Internet skills are absolutely necessary, and their Foundations exam tests you on the fundamentals. The Javascript and Perl exams will then get you their Professional cert.

Also, download Microsoft's free web developer and sql server express editions, and build web sites. Practice and practice, then get MS textbooks for, and take, their exams 70-536 and 70-562 to get the MCTS (MS Certified Technical Specialist) cert.

Good luck.

[1]: http://ciwcertified.com/certifications/program.asp CIW

1

First, I think we all feel like that when graduating college or job hunting. Experience doesn't happen overnight.

But what can help you gain experience quickly is to be naturally curious and be a willing self-starter. You'll learn very quickly when you take the time to learn on your own and find personal hobbies that sharpen your skills. Always be willing to learn and you'll come a long way.

If you're currently job hunting, I'd recommend creating a personal website with a portfolio. Upload projects you've made based on what you've learned. Make it really cool looking. I'd also recommend Indeed.com in your search.

MattB
  • 101
  • 1
1

I've spent a month looking for work but my skills (C, Python, Objective-C) are relatively shallow and are not so desirable in the local market, where C#, Java, and web development are much higher in demand.

Your skills may be more valuable than you think. Look into the web framework Django. It is a framework for web development that is built around CPython. It is fairly easy to use and is extraordinarily powerful and is used by many big name companies for quick development.

SC Ghost
  • 121
  • 2
1

If you want to develop logic and thinking for programming learn programming using languages such as C.

Read and understand the examples in the C book by Kernighan & Ritchie. Search google, you will find the ebook.

when you are comfortable to think solutions to problems (small programming problems), then you may try to learn different tools, frameworks, or whatever.

You can also try to prepare for SCJP exam and read all the topics. Try out all small programs that you encounter and experiment with them. If you read sun site on SCJP resources you will find many small programs, try to understand them, try to write similar on your own. Then when you are comfortable move to swing, JSP, Servlet, Struts, or Spring or whatever. You need a very good foundation first.

You may consult ACM programming contest related programming problems and try to solve them. if you cannot, checkout the solutions by others. That way you will build strong logic and thinking.

When you are comfortable then you can try to memorize library and practice on that.

http://justetc.net/knowledge/index.php?table=Articles&categoryID=32&category=Java

Try to build an application. Think about a small personal or business problem and try to write a complete application for that.

May be you could invest in a better CS program

1

Just because you graduate with a degree in computer science does not mean you must program for the rest of your career. Did you ever take any classes in systems analysis and design?

  • Have you ever seen a job advertisement for a systems analyst or designer? –  Jun 24 '10 at 11:02
1

When I've interviewed junior programmers (i.e., recent college graduates), I always ask them what projects they've worked on, especially class projects involving multi-person teams. After all, that's the kind of work they'll typically do in a real job.

If a person has never worked with other programmers on a project, that could require a steep learning curve.

The way to learn how to program is the way to learn just about anything: practice doing it. A lot.

1

Remember that, a thousand mile starts from the first step. Everything starts from beginning your college degree is just only a bridge which brings you to the first step of life. So you are just started, put all actions in every plan you got, one day you will be at the place you wanna be. Good luck my friend.

Vicheanak
  • 101
  • 2
1

I had the same feeling when I graduated in computer science but I kept reading books (hs, started from Visual Basic 6) and then Oracle and Java. The more you read the more you get to know to try. After four months of reading and practising, I solved those alogrithms with which I was so poor in graduation.

1

Hey!
Your question is very good, and it is the real life scenario for many just examined students. I also just graduated and during my entire time of the education, I felt the school gave me to little valuable knowledge, and to much pointless information.

The thing with college is that it does not have time to give you a very deep knowledge. In most of the courses, you only have time to focus on the foundations of one specific area inside the are of the area (yes, it's that fluffy). The approach is either that, or just try to give the students an overall knowledge about the area (this is of course different depending on the degree of difficulty for the course).

Myself had the luck to get a development job just after graduation. Many felt this was unfair, because I'm not an incredible programmer. I know the basics, and I know some area a bit deeper. What I generally think I'm good at and that people should be is HOW to get the knowledge. According to me, this is the most important knowledge school gave me. Like many says, you can't know everything. What matters is that you in the end do know what you are suppose to know. Therefor, knowing how to achieve the required knowledge is much more important, than in fact knowing it from the beginning.

One thing that shouldn't be underestimated is the value of social skills. You can be a really good programmer, but socially handicapped. You do not know how to promote yourself, or work together with people. Specifically the last thing, work together with people. In a project, you are (most of the time) forced to work with people. If you have big problems with this and actually got the job, you will probably have a hard time staying there.

Very interesting subject!

1

Shoot for the moon and you'll land among the stars. Don't hesitate at applying for big companies, you never know what they are looking for, and I do believe that when you just graduate you really don't know much about anything, you will gain most of your experience at the job. Just jump in and in time you will be a great programmer.

1

user30997:

Start a personal project. The trouble with school is that the most complicated thing you did there was a project that took 15 weeks to a year and involved a couple other people. The problem domain was well-understood (your professor didn't give you any tasks that didn't fit neatly into your semester.) This is not a luxury the real world affords.

If you have to do something major, start-to-finish, that you can be passionate about, your brain will start to wrap around the process. As long as this is just a career and you don't have a love for it, you'll still feel like you haven't made it yet.

I don't know if I can agree completely with you on that subject. I do know that from my own personal experiences in my software engineering classes that that wasn't the case for us. In those classes, it seeemed that the expectation was that we would teach ourselves whatever we would need to know for our projects while our professors stuck to teaching UML diagrams which we usually ended up throwing away once we actually got to coding.

But, I'm guessing that your school was probably different from mine. I just wanted to point out that school projects aren't always so easy as you might think. It just depends on the professors and their style of teaching.

1

But, I can see why OP wants to study algorithms. For the recent graduate in computer science, we're not only competing with each other but also those who didn't take computer science but either took programming in college or are self-taught. For us, our strengths wouldn't be how many languages we know or if we even know these languages well. For the computer scientist, his greatest strength would be his general ability to solve problems. You can always look up a certain class or a certain method later if you need to. It really doesn't matter if you remember everything there is to know in a language, because if you don't know how to use it then you're not going to get the job done.

New languages are created and old ones change but the general principles behind programming, that is the principles behind solving a problem in general, remain the same.

1

I noticed your skills include Objective-C iPhone and iPAD development is all the rage at the moment. Buy a Mac or get a VM image of the Mac OS X and start building. Think of a game or something you'd love to have on the iPhone and take this up as a hobby project. One of the graduate developers where I work built a few iPhone games and got the job here. Now his a valuable member of our .NET, java, PHP, Objective-C development team.

As everyone has said don't give up just keep applying for all jobs.

Nickz
  • 1,430
  • 1
  • 13
  • 18
1

Biggest thing to keep in mind is, you went to school to get a degree, not just to teach you how to program. In school, they teach you how to think and how to problem solve. Being a great programmer is up to you :) and it takes lots of practice.

1

First of all, pat yourself on the back because yours is not a singular case. This realization occurs to many CS graduates. However, there are a few points in you that are worthy of appraisal:

  1. you look at sites like Google and think about its implementation
  2. you are honest

Curiousity shall be your driving force and especially in a field that needs continuous learning, curiousity may be considered an asset.

Honesty shall be very helpful. When you are working in a group, honesty is essential for the success of the group.

Coming to learning programming, well don't try to assimilate all details of algorithms at a time. It will seem to be a herculean task. Instead pick a task you like and gradually improve your code.

You are skilled in two nice languages: C and python. You can choose projects involving either, read the code of open source projects and try modifying them to your benefit. Reading API and combining libraries together to get them to work is easy; but try to understand the design principles behind the API.

Recently, when I took up a new project, I started doing background reading on it. I had to save important URLs in a file so that I can refer them to my friends. Then it occurred to me to have a button, in my browser, which when clicked would append the URL of the current tab to a pre-assigned file with an optional comment. Its not a very big task; but it will be useful to me and my friends. I have not done it yet; but I have talked to a friend about it and he shall do it soon.

dknight
  • 101
  • 2
1

This is because you went to a university for a bachelor degree in computer science (maybe an emphasis on programming) and not a technical school for a degree/certification in programming.

You are expected to write some bad code and through: reading some books, taking a training class, and getting coworker feedback, fix the problems and limit the same mistake in the future. As you learn about development, you're going to constantly be wondering if you know enough or whether your code is ever good enough. There will be plenty of new techniques, languages and methodology trends to keep you busy for the rest of your career.

Because anyone that spent that much money, gave up 4-5 years employment, and stayed up all those nights, should have learned how to learn. If not, you will be exposed as the fool you really are and get downvoted frequently (I know, I asked for it.).

JeffO
  • 36,816
  • 2
  • 57
  • 124
1

According to Malcom Gladwell in Outliers, it takes 10,000 hours of practice to become an expert at anything, whether its figure-skating, painting, or programming a computer. Some use the figure of 10 years instead of 10,000 hours. (Do a Google search on 10,000 hours expert for more on this topic.) I got an MSCS almost 35 years ago, and am still learning.

tcrosley
  • 9,541
  • 1
  • 25
  • 41