Live data from Hacker News

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

stackoverflow.com

41–50 of 135 posts

Re: I'm graduating with a CS degree but I don't feel like I know how to program

#41
Being an undergraduate in a large public university gives you all sorts of great opportunities, like rooming with a painter (art studio/anthro double major). Among the many jewels I've borrowed from our conversations, one I particularly treasure is the notion of praxis.

Praxis (as I understand it) is simply the harmonious blending of practice and theory into action. As I'm beginning the exit trajectory from undergrad and into the "real world" (whatever that is), I've been reflecting on my education in the art of programming. I've realized that praxis has been the only substantial educational tool I've had.

Knuth says it best. “If you find that you're spending almost all your time on theory, start turning some attention to practical things; it will improve your theories. If you find that you're spending almost all your time on practice, start turning some attention to theoretical things; it will improve your practice.”

Re: I'm graduating with a CS degree but I don't feel like I know how to program

#42

Earlier quoted context omitted.

management didn't understand basic automata theory Do tell more about it; as I feel that's not why they wasted millions. IMHO management isn't required to understand much about CS, as long as the relationship with the developers is as between a customer and an engineer (i.e. customer asks for stuff, engineer explains what he can and cannot do). Most problems with management comes from a disconnect with reality. Even…

management didn't understand basic automata theory Do tell more about it; as I feel that's not why they wasted millions. That company tried to translate code from one programming language to another using only regular expressions. (This was a long time ago when you couldn't almost count on most "regular expression" implementations being Turing Complete.) Perhaps the problem was really that engineers who understood th…

I'm going to play devil's advocate here, and point out that you can actually construct the proper automaton where the transition conditions are decided by regular expressions.

It might work like this: some programmer working on the project realizes something can't be parsed in a finite state machine, and 'cleverly' separates out one batch of regular expressions into a loop/recursive call. Repeat until the programmers are satisfied with the number of conditions they can handle. I've seen software that was actually written like this. Fortunately, the language it was designed to parse was pretty simple.

Re: I'm graduating with a CS degree but I don't feel like I know how to program

#43
post #25

I remember feeling the same thing in college... I expected CS to be a vocational program that would teach me how to write the applications I used on Windows every day. By Senior year, when not a single "real world" application was written, I finally realized it was all about teaching good theory and practice, and the practical stuff I'd need to pick up on my own.

Several students in my campus ACM chapter realized this and worked to make our meetings fill in some of the gaps. We had weekly meetings and covered things that attendees could get started using immediately. Code-alongs were encouraged. Popular topics had followup meetings. I don't even know how much time we spent playing with POV-Ray.

The lightning talks meeting was also really popular; one guy showed how to use Blender in five minutes, someone else talked about a darknet he had written, and another student used it to distribute Google Wave invites she had from her summer internship.

Re: I'm graduating with a CS degree but I don't feel like I know how to program

#44
post #14

I believe that there are two ways to get good at anything, "push" and "pull". Push: You learn from books, classes, mentors, and studying examples, then apply what you have learned. Pull: You have a problem that you must solve, then you learn what you need, any way you can, to build the solution. I suppose there are pros and cons of each method, and I imagine that many people here have used some of both. For the recor…

It's funny, I used to be a pull person. I learned by doing. It worked great. But at some point, I picked up a book because of a recommendation and it was astonishingly good (Cocoa Programming on OSX, Hillegaas). It gave me a real sense of confidence and overview that I was lacking in all my pull-learned topics. I guess this is because pull only ever provides very localized knowledge but you rarely see the big picture…

Push will allocate concepts into the logical recall section of your mind, meaning that you make the effort to recall these things. For instance, if I'm designing a UI, I'll sit back and think about principals and rules before I do anything.

Pull allocates into the creative regions, meaning you are a bit more intuitive towards what makes up good design.

One isn't always best for all stages of skill development towards mastering something, and a healthy development is likely to include both sides of effort. A push-and-pull if you will.

To draw an analogy, this is similar to language development in persons. Your native language is stored in the creativity hemisphere of your mind, and languages you are trying to pick up later in life are in the "information" side until they reach fluency. Cultural immersion would be a pull, where as learning from books is a push.

Re: I'm graduating with a CS degree but I don't feel like I know how to program

#46
post #14

I believe that there are two ways to get good at anything, "push" and "pull". Push: You learn from books, classes, mentors, and studying examples, then apply what you have learned. Pull: You have a problem that you must solve, then you learn what you need, any way you can, to build the solution. I suppose there are pros and cons of each method, and I imagine that many people here have used some of both. For the recor…

The problem with pure pull is that you end up spending an inordinate amount of time reinventing the wheel, working towards one solution that you can see, while a much better and simpler solution is just around the corner because you don't have the breadth of knowledge to see past the sort of myopic view it provides. On the other hand a pure push approach results in lack of practical knowledge, and frequently a "purit…

Maybe the best thing to do is to try and sequence your "pushing" and "pulling." I actually graduated with a Political Science degree in 2009. I came to my first job not knowing a lick of programming, and the job didn't require it anyway. I got into programming because we were trying to do a website redesign and I wanted to help out. After we finished up that project, I kept going at because I liked it.

The first 9-12 months were tough. I read some beginner's books, wrote lots of really ugly code, and got things to work eventually, if only barely.

Then the code started to get prettier and more robust, and I picked up some more theoretical books like Leiserson's Intro to Algorithms to learn the theory. Having "pulled" around code for 9-12 months on my own, learning more formal computer science really allowed me to begin gluing those pieces together.

Everyone learns differently. Maybe a better approach for some CS programs would be to throw students into the water for their first year, let them struggle reinventing the wheel and solving practical problems as best they can, and then teach the theory and formalisms later?

Re: I'm graduating with a CS degree but I don't feel like I know how to program

#47
post #39

This touches on several issues. 1. Should college teach you to program? This is a philosophical question about whether a CS degree should be educational or vocational . The general consensus seems to be that it should be the former not the latter. It should give you the theoretical foundation that you can apply to almost anything. Therefore, college won't necessarily teach you any programming beyond what you need to…

The "do you like to program" and "programming vs. being a programmer" are really good points.

We recently hired and then let go of a guy who is doing a CS degree, good grades, competes in ACM tournaments, so he was really sexy as a junior programmer. It turned out he doesn't really like to program, he's not a programmer. The way this materialized was when given an assignment, he wasn't willing to proactively figure out how to solve it. We either told him in great detail how to solve it or he'd throw up his arms.

This happened in 9 out of 10 cases, whether it was a really small (1 hour) or a larger (multi-month) assignment. After two months of this we let him go.

Re: I'm graduating with a CS degree but I don't feel like I know how to program

#48
post #6

Similarly, I did not graduate with a CS degree, have been programming since 5th grade and yet feel I cannot program 'professionally' for a big firm that is loaded with CS geeks while I'm just an amateur programming for 13 years. In this case, a lot of it is what you tell your brain.

Just study the following: - Understand time & space complexity - Security & Encryption - Concurrency & why ACID transactions are hard That will save you from most of the most embarrassing and costly mistakes of programmers without a formal education. I've actually worked at a company that wasted millions on a fruitless project because management didn't understand basic automata theory: - Finite State Machines / Regul…

That's a very interesting answer. I'm a self-learner, so can you kindly recommend good resources on "- Concurrency & why ACID transactions are hard"

That will be really helpful. Thanks.

Re: I'm graduating with a CS degree but I don't feel like I know how to program

#49
I think there is huge value in trying to become what has been called a "full stack programmer". In the maning of: try to understand how computer systems work by understanding how each part of the stack works. Don't try to completely understand every subtle detail of every part - try to understand it like you understand how a combustion engine works.

My list would be:

  - basic electronic concepts, ie. transistors, XOR / NAND, bit shifters, adders
  - assembly language
  - hardware layout: CPU, registers, main memory, MMU, interrupts
  - operating systems: hardware interface, multi processing, file systems
  - networking: packet networks, ethernet, TCP/IP (sliding window, congestion control)
  - low level programming: C with fopen & co, sockets, structs, system calls
  - compiler construction (this is important!), parsers, translators, programming language implementation and virtual machines
  - algorithms: complexity theory, automata, CFGs, common data structures (heaps, maps, trees)
  - discrete mathematics, statistics
I think if you can explain all of these in at least a sort-of, hand wavy way, then you're on a good path to become an excellent programmer. I also think that is what a good CS degree should teach you. Try to explain to yourself in a children's story way what actually happens when you click your mouse button. If you don't know something, look it up.

Re: I'm graduating with a CS degree but I don't feel like I know how to program

#50
post #14

I believe that there are two ways to get good at anything, "push" and "pull". Push: You learn from books, classes, mentors, and studying examples, then apply what you have learned. Pull: You have a problem that you must solve, then you learn what you need, any way you can, to build the solution. I suppose there are pros and cons of each method, and I imagine that many people here have used some of both. For the recor…

Just remember all the algorithms and data structures they taught in class (the push stuff). That'll help you some day when you need to scale (while you're pulling).
Post reply on HN