

Advice for a computer science sophomore in college? - riddas

Hi Everyone!<p>I'm a sophomore in college majoring in Computer Science and Math. I have always loved programming. I started programming in C when I was nine years old and over the years I've picked up Visual Basic, C#, Java, C++, JavaScript, Objective-C, Python, Ruby, elementary Haskell and elementary Erlang, and I learned Perl back in the day which I've mostly forgotten.<p>I have not done much network programming. I have done CGI programming, but that was about six/seven years ago. I've done some socket programming and written (school) programs to do interprocess communication, which I understood and liked. I'm taking a course on client/server programming and another one on network security next semester, which I am really looking forward to.<p>I'm seeking advice on how to proceed with future learning. I've mostly done application (mobile and desktop) development, not much of web development. I'd like to pick up some web development this coming semester. Since I know Ruby and Python, should I start by learning Django and/or Rails? Any other suggestions on starting web development? I have a good understanding of HTML and CSS.<p>Also, I'd also like to know how hard it is to pick up and be good (read: productive) in functional programming languages coming from a purely structured/object oriented background? I've been reading up on Erlang and Haskell, and I'd like to know your opinions on whether it's worth my time trying to learn them. What about Lisp, Scheme and other functional languages?<p>Any help/ideas would be really appreciated.
======
lfborjas
Hi there! You seem to know your stuff, or at least _like_ it (in a computer
scientific sense), so I have only a couple of things to say: first, if you've
already written socket and networking software, you could be better off
starting with "raw" web development frameworks (or no framework at all,
writing a tiny web server could be a really cool challenge:
<http://docs.racket-lang.org/more/> ), to get the knack of how a web-app
works, without all those layers of specialization interfering: try to write
something in flask or sinatra, or even in ruby's "rack" or it's python
equivalent, to be familiar with the http request-response cycle and how the
different moving parts (building html with css and javascript, interacting
with file systems and databases and network operations) really work and why is
it that frameworks exist (which boilerplate code they do for you). Since you
know javascript, you could also check out node.js, which is raw enough. And
_then_ , when you've got how is it that web development works in its guts, you
can move on to more easy going stuff, like rails, pylons, django or whatever.

The second thing is, although someone else might say that scheme sucks for not
having lots of libraries, I've found it very eye opening, specially by
watching -and reading- the lectures in MIT's "structure and science of
computer programs" (here it is in ocw: [http://ocw.mit.edu/courses/electrical-
engineering-and-comput...](http://ocw.mit.edu/courses/electrical-engineering-
and-computer-science/6-001-structure-and-interpretation-of-computer-programs-
spring-2005/) , videos and book are free), if you go through them and thrive
to get it, you'll be doing yourself a great service, learning funtional
programming, no matter what language it is, will make you a good programmer,
because it will force you to think not in terms or how to make stuff easy for
the computer, but in how to make stuff "elegant" and easy for yourself, the
programmer (kinda like when you do math and it "feels just right"). I
personally have found myself to be a better -more productive- python
programmer by learning scheme with the SICP course and how to write javascript
in the functional style.

Godspeed in your studies, CS is a great thing to study :)

~~~
rdasxy
Thanks. That was very helpful. I will try and follow the course. I have read
parts of the wizard book, and I must say I have liked what little I have read.

