Hacker Newsnew | past | comments | ask | show | jobs | submit | yacoder's commentslogin

I certainly believe that the kind of stuff you learn on a CS degree is incredibly important, esp. algorithms, hardware architecture, etc.

I agree with you that I think the academic approach wouldn't be as efficient as taking a more practical approach to what I need to know.


Having said what I did in a brother post to yours, on the other hand I'd say that the amount of practically useful stuff in a CS degree is surprisingly small, and I learned most of it before I went to college. I'd probably rate analysis of algorithms as the most useful, but it is very simple stuff: it's just expressing the time or space used by an algorithm as a formula, a function of the input size, but discarding all but the fastest-growing term.

There's all the other stuff that you need to know, like the basic data structures, but these are (IME) hard to avoid if you've done much programming at all. I'm not sure you need to know hardly anything about hardware architecture unless you're aiming to code at a very low level, device drivers etc. Obviously, familiarity with machine code, cache characteristics, optimization at the assembly level, etc. are useful, but these things are best learned by sitting at a computer with a stack the Intel processor PDFs, an assembly timing loop and a simple algorithm you're trying to reduce the clock count on.

I'll add some of my own experience, as I got into compilers and currently work as a compiler developer. I was interested in compilers at a young age, I recall thinking hard in school about how one should go about evaluating arithmetic expressions correctly accounting for precedence. I wrote an open-source expression evaluator for the Delphi community, as part of the JEDI library. I built a regular expression compiler in Java, compiling to Java bytecode, as my final year project in college. Then, in my first job (in a software company, working on a green-field project, very lucky), I was able to point out the benefit of writing a custom compiler for a DSL to fill in a configurability-shaped hole in the architecture. After having built up this experience, I was in good shape when Borland (as it was at the time) came calling looking for an engineer for the Delphi compiler.

I don't think there's a deterministic kind of guarantee that can be drawn from this experience. But learning the whole stack of technology that you need to implement a language certainly gives you plenty of practice in a lot of the fundamentals of CS, right from data structures and parsing at the top (I personally would avoid parser generators as a didactic exercise) to machine architecture and cache hierarchies at the bottom, to details you'd rather not have to know about, like the idiosyncratic addressing modes of the x86 processor. And putting it into practice, even if it's in an open-source side-project, gives you a better angle on related opportunities.


Having said what I did in a brother post to yours, on the other hand I'd say that the amount of practically useful stuff in a CS degree is surprisingly small, and I learned most of it before I went to college

Any chance you could give a list of that surprisingly smalll amount of practically useful stuff?


I tried to: analysis of algorithms, perhaps data structures. Analysis of algorithms is the crucial one; if someone writes O(n^2) code when they could be writing O(n), and the constant factor is negligible, and they're unaware of these things, then IMO they have no business writing code that other programmers will use. They might be able to solve their own problems for their own data sizes, but they shouldn't infect the wider world with solutions that break under stress.

For data structures, it's more important to have a taxonomy, and a rough general knowledge of the kinds of data structures that are available, so that you know what's required and when, and have enough confidence to implement any given data structure as needed.

It's also nice to have the time and opportunity to look at different levels of various stacks, such as the network stack (the analog wire signals, how binary signals can be encoded on them, ethernet, IP, TCP and UDP etc.); and things like OS caching, process scheduling, etc. But where you're looking to put those kinds of things into practice, it's not difficult to take a day or two out of your time and read up on them - it doesn't take long to scratch deeper than an undergraduate course covers (IMO).

Depending on what area you target, other things can also be useful. Re compilers and languages, I'd be wary of taking the academic stance too seriously. Classic texts like the Dragon book overemphasize the analysis of finite state machines and pushdown automata, DFAs and NFAs, and the details of grammars and parsing, LL vs LALR, and generally all the data you need if you want to rewrite lex or yacc. But really, parsing is a very small part of writing a compiler and is actually quite easy, unless you're trying to parse C++ or something. And a more modern trend is to overemphasize type systems and their analogies to proof systems; I'd also steer fairly clear of these guys, as they are (IMO) primarily interested in churning out PhDs by creating new mathematical abstractions that have very little practical application.

When downplaying the practical value of much of a CS degree, however, I'm assuming that you already have pretty decent coding chops. For example, I would expect that you wouldn't be intimidated by programming competition problems, for example see some of the problems in the PDFs from this page:

http://acmicpc-live-archive.uva.es/nuevoportal/

The harder problems rely on a relatively small amount of base knowledge, but you have to be pretty comfortable with recursion, generating combinations and permutations, dynamic programming, and often a little computational geometry. The easy ones are more like warmup in how to read and follow instructions.


The problem with that list is that it is going to be different for each person who got a CS degree.


Thank you. The positive encouragement of HNers means a lot to me.

I think a consensus is emerging that putting the language project aside for a while to focus on OSS would be a good idea.


What are your skills ? (programming languages and so on ?)


currently, mostly C#, SQL, F# and some scheme. Most of my experience (and entirely professionally) is on the MS stack, though I run linux at home.


Ok. I see ErrantX has already made you an offer, nice to see HN'ers help out other HN'ers!

I'll be running a pretty weird experiment in a few weeks, I'm not yet ready to explain it in public because I'm still tweaking the idea and I don't want to limit myself by nailing it down, if you are interested drop me an email (email in my profile).


I'm ok for money, but not great (some debt) so can't really make that lovely lovely idea reality :) nice suggestion though!


Wow! I am definitely interested in discussing any possibilities (I have clearly been far too reticent on this front as is clear from discussion here), for obvious reasons I'd rather not post [all] those details here; have dropped you an email.

Roughly: based in London, mostly C# skillset (currently).


thank you very much! I think you are perhaps being somewhat overly kind! I care about and love programming, though I do tend to feel like I somewhat suck at it. I guess right now I just want to find a way of actually getting somewhere where I can improve my coding chops.

I mainly program in C#, though I code in scheme (what a lovely language), F# which is a .net ocaml near-enough, and I am learning ometa which, though not a language, allows you to experiment with languages quite nicely in other languages.

As far as stuff I've done, I've mainly played around with stuff; outside of work I've been on-and-off working on the language idea for a while, at work I've done a bunch of internal stuff much of which sucks :'-(. I try to do as good a job as I can, though it's difficult to stay motivated when in such a negative environment. Am rather depressed about it all at the moment to be honest!

I feel like I have a lot more to improve on. a lot more. In fact I have a terrible fear that if I was to apply for jobs now my suckiness would screw my chances at some of the cooler places blowing my chance to apply at them later. Argh.


whats your email? friend of mine is looking for great C# coders.


I have definitely been reticent on the jobsearching front. I guess a combination of inertia/laziness and fear have got in the way; also I suppose I am worried that if I apply to jobs before I am 'ready' (well practised in the algo stuff typically asked at decent job interviews, etc.) I will end up blowing my chances at these places then later when I come to apply with more experience in this area they won't want to hear from me. Is that a stupid approach?


Yes. Crikey. There are thousands of companies in the UK that hire programmers. How many of them can you possibly blow? Besides, the more jobs you apply for, the more practice you'll have applying.


I agree with your advice, but just a note on the UK:

Software companies aren't the same this side of the pond, the culture seems rather different. Maybe I've just had bad experiences, but London is full of soul crushing financial services/admin software type places. I'm sure the US is too, but there also seems to be a healthy community of fresh companies.

Check out your very own jobs.stackoverflow.com - this is one of the places I would expect a modern company to advertise, but there are nine jobs listed for the whole of the UK, compared to over 50 for NY alone. If you want a "normal" programming job you have to take your chances with the vast sea of recruiters on Monster.co.uk.

(or, of course, build personal connections and/or do your own thing)


There are still a number of interesting companies in London depending on what you're interested in...

Web development: check out NMA Top 50 for Agencies.

Startups: Check out the WiredUK Silicon Roundabout article _and_ the comments!

Misc: Check out things like Times TechTrack.

Interested in a particular technology? Check out the official language job board and search for London (e.g jobs.perl.org).

There are definitely interesting companies you just have to spend some time finding them because they won't come to you.


Yes, there isn't really a software startup/innovation culture in London.


Ironically I sent you an email about this very subject asking for advice (though more on the Micro ISV side of things) earlier :-)

Yeah. I know. I am being an idiot. I guess it's just easy to be too afraid of being rejected, which I definitely am. I need to get over myself I think.


I'm wondering if you're being too choosy about the jobs you're applying for? If you really think you'll blow your chances at job A which you really want, apply for job B. The experience of working job B might give you a more precise insight into what you want/don't want in a software job.


yes, I want to switch from internal to a software company. I definitely feel like open source is really critical; I don't feel like I'm working in an environment where code quality matters to anybody, the only way I'm going to get to work on a decent code base with people who care (and will improve me) before moving job is by working on open source.


I also suggest to just apply to more companies, for example try 10 at first and see what they told you. C# is pretty much in demand, so it should not be a problem to get a junior programmer job.

But maybe don't be too romantic about a job in software company...you could very well find that it also isn't a ideal job...you will perhaps fight with bureaucracy, being forced to do dull work, etc. etc.

So before quiting your job, try to think really deep why exactly you don't like your current job. Maybe it is something more fundamental, and ordinary software company might also not fix it. Anyway, good luck, finding a software programmer job is certainly achievable.


I agree, but I don't think I am being romantic - I do realise jobs always have those boring, etc. elements, it's a matter of whether overall you are happy with it.

And I certainly don't accept the contention that there aren't jobs programmers can be really happy in (as some contend, not saying you are necessarily), I think that's lazy thinking...

In any case I certainly don't think it's something fundamental as it's not the work itself that bothers me so much, but rather the pain of working in a negative situation.


Thanks for the advice; will definitely take it on board.

It's true that the language project itself is unlikely to be monetisable (especially since the chances of it ever being used let alone popular are close to 0), but I wondered whether I could develop something along a similar vein, say a code analysis tool or some such, which could find application of language-related techniques and keep me in an area I find especially interesting.

I guess I just want to be happy as a coder; whether that requires me to be independent or can be achieved working for someone else is something I'm not yet sure about. I agree I need to leave the negative situation, I guess part of what I'm asking is how best to improve myself such that I can get a job somewhere decent.


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

Search: