PDA

View Full Version : I'm Utterly Bored. What Now?



ankursethi
June 11th, 2008, 01:47 PM
A few days ago I decided to find out what I can do to improve my programming skills, and came up with a huge list of things to learn. Now I'm stumped because of too much choice.

I have the following options :

1. Polish my Python skills. I already know most of the language, and reading through some articles and code samples would be pretty enlightening.

2. Learn a functional programming language. O'Caml, Lisp, Scheme, Erlang, Haskell ... again, too much choice. I really want to learn at least one good functional language and write some code using it. I'm lost here.

3. Jump in and start solving some of those "Online Judge" problems. A chance to hone my coding skills, and a chance to dive into compsci.

4. Pick up a good data structures/algorithms book and read it. I found a couple of books which were really interesting and had neat problems.

5. Pick a project and code it. This would be fun, but most of the projects I've come up with are too advanced for my skill set. I'm out of ideas, really. I don't want to contribute to any project (I don't think I have the requisite knowledge yet).

6. Learn to program games using SDL. I remember finding a nice, meaty, up to date tutorial somewhere.

7. Learn Smalltalk.

8. Do something completely different. Learn Blender, or learn to play the guitar. Or something. You tell me.

So, what should I do now? :-? Assume for a second you are my mentor. What would you recommend I do next?

PS : I'm more inclined towards the functional programming/Smalltalk thing, but I can't find any good resources. Point me to learning material if you know of any.

HalPomeranz
June 11th, 2008, 01:58 PM
If you feel your programming skills are not yet up to contributing to some programming project then it sounds like you should spend time getting better at the languages you do know rather than learning a new language. I think option #4 (pick up a good data structures and algorithms book) is probably your best bet.

nvteighen
June 11th, 2008, 02:18 PM
#4, undoubtly.

Kinnza
June 11th, 2008, 02:45 PM
i suggest a version of #5
program anything.... advance in what you already know how to program but practice it
you dont have to choose a big project :D

gustabuntu
June 11th, 2008, 02:58 PM
Well... I will say (7), if you want to learn to program with Objects. Not object oriented, but with real alive objects. Others, like java, are just object oriented. In smalltalk, anything is really an object.

I know, unfortunately, not many companies are using it compared with other languages, same as linux vs W.

Just a taste.. in Smalltalk the number 1 and 3 are objects, and if you write 1 / 3, that is actually another object called fraction. Therefore, if you write 1 / 3 * 3, the fraction returns an integer object, and not 0.333333 as in java, where the error gets multiplied with each operation.

The "normal" for{} doesnt exist in Smalltalk. If you think about it, why do we iterate lists from outside the objects. You create a vector, and then from outside you iterate it. What about that encapsulation idea? Well.. it was destroyed with the object-desorientation.

You want to have 5 integers... good, you choose an array. If you want to sort them, and again, you need to create a vector and wrap them, or use mysterious APIs to do that. In Smalltalk, is all natural.

Try Squeak Smalltalk, is nice and lot of fun. Things like rotating a windows 34 degrees is perfectly possible. And you can learn good programing practices (like model-view-controller invented by them) from there. Or understand the real Proxy class in Smalltalk takes 2 minutes.

Good luck.

Lster
June 11th, 2008, 03:14 PM
I would go for 3, 4 or 8 myself.

Wybiral
June 11th, 2008, 03:19 PM
Learn functional programming by reading SICP (http://mitpress.mit.edu/sicp/full-text/book/book.html)

(trust me, you'll learn so much more than functional programming)

AnRa
June 11th, 2008, 03:20 PM
Try with TopCoder (http://www.topcoder.com/tc), Scheme and Haskell. :)

xlinuks
June 11th, 2008, 04:25 PM
If you are planning to get a job as a programmer you have to know at least one language (very) well. You'll have troubles finding a job knowing the basics of several languages. Correspondingly - you'll have no problems if you know _only_ one language but know it well. There's a lack of such people in the market, because almost everybody knows several languages (including such langs as JavaScript) but knows none of them too well to stand out of the general "crowd" when it comes to picking programmers for a given project which is to be written in a given language.

KingTermite
June 11th, 2008, 04:50 PM
I've been in this boat many times in the past. I find that the best bet is to pick one and stick with it. When I try to do too many things at once, I'm constantly spinning wheels and not really getting anything done/learned.

Although, #4 is a SUPERB starting point if you've never been formally trained in college or anything. There is a LOT to be said for knowing the fundamentals. Best to start by learning data structures. Then move into algorithms. Many algorithms depend on certain data structures, so its best to know them first.

pmasiar
June 11th, 2008, 05:43 PM
Your questions makes as little sense as asking stranger on s street for advice where to go for vacation. If you don't know what are your preferences, how someone else can? If you don't have your own goals, how you can accept someone else's? And how smart person can be bored when there are so many exciting ideas and projects to participate in?

molotov00
June 11th, 2008, 05:54 PM
Your questions makes as little sense as asking stranger on s street for advice where to go for vacation. If you don't know what are your preferences, how someone else can? If you don't have your own goals, how you can accept someone else's? And how smart person can be bored when there are so many exciting ideas and projects to participate in?

My thoughts exactly.

The very fact that you had to ask the question tells me you should do none of the above. You clearly aren't serious about anything you mentioned in the post.

Kadrus
June 11th, 2008, 06:21 PM
Learn Ocaml,great functional language and very powerful.

nvteighen
June 11th, 2008, 06:33 PM
Your questions makes as little sense as asking stranger on s street for advice where to go for vacation. If you don't know what are your preferences, how someone else can? If you don't have your own goals, how you can accept someone else's? And how smart person can be bored when there are so many exciting ideas and projects to participate in?

We human beings have an undocumented feature called "indecision" in which we don't know what we want, though we know we want something. Let's help the OP to figure his preferences out; then he'll do whatever he wants.

@OP: You're a "not-so-beginner", I guess? Why don't you keep at Python (which you have already started with) and master it? Finish what you've started! ;) Things may be difficult sometimes and you may get bored of Python at a moment, but effort and dedication is always worth.

ankursethi
June 11th, 2008, 08:02 PM
Your questions makes as little sense as asking stranger on s street for advice where to go for vacation.
Well, what's wrong with that? I don't travel much and chances are that the stranger might turn out to be a regular tourist.

The point is that I want to do all that I mentioned. I just can't figure out what I should do now. To tell you the truth, I haven't been too happy with Python lately. I don't know why. I just find using C much more pleasing. I wanted to know Smalltalk or a functional language because these are "pure" languages. They "bend" your mind into thinking in different ways, something that excites me.

You see, I'm no computer scientist. All I know of programming comes from the internet. I don't have many computer books, and neither can I afford to buy them. I must depend on someone who is professionally into CS to guide me.

Another point of this post was this : I want to start afresh. For the past 2 years, I've been banging away at my keyboard and producing nothing particularly interesting. Now I want to pick a way and stick to it. I don't care if I have to learn another language (in fact, I would very much like to learn something new, something unlike C and Python).

Right now I'm leaning towards SICP. I've heard it's outrageously good, and it uses Scheme, which is a functional language. I'll try it out for some time before I arrive at a concrete decision.


The very fact that you had to ask the question tells me you should do none of the above. You clearly aren't serious about anything you mentioned in the post.
I'm not serious. Programming is my hobby, not a profession. I can freely do any one of those things and it wouldn't really hurt me. I'm not doing this for a job. At least not yet.


You're a "not-so-beginner", I guess? Why don't you keep at Python (which you have already started with) and master it? Finish what you've started! Things may be difficult sometimes and you may get bored of Python at a moment, but effort and dedication is always worth.
You know, you're right. But really, Python bores me these days. Sure, it'll be my language of preference if I ever decide to actually make something big, and it'll always be my favorite language. But Python brings no groundbreaking concepts to the table. Also, you can't really eat pizza everyday, even if you like it more than anything on Earth.

Bear with me for a bit. I'm an explorer, and I've lost track. Just point me in the right direction and I'll figure out the rest.

I've narrowed my choices to :
1. SICP.
2. Smalltalk.
3. Something other than programming (you tell me)

(I'll do online judge problems with either Scheme or Smalltalk if I learn them)

Can+~
June 11th, 2008, 08:18 PM
#1 - Actually, once you learn a language, there isn't much else to do to expand it, other than learning how the modules work (there are billions, but usually, it takes little time to pick them).

#4 - That would pretty much enhance everything about programming. Programming is based on the principles on how to process data, and how to store it while doing it (or for later). Having that kind of knowledge makes you a better programmer overall. And also, it can be fun. I had a task in which I was asked to compress a file using the Huffman's Tree, well, I hit my head against the wall a few times (damn C++), debugged everywhere, but in the end, I had a program that actually compressed files, and I was filled with joy over the success.

#5 - I also want to start my own project, but instead of going out and rush, I take it with time. For example, I want my full project to have X, Y and Z features. Instead of building the full GUI and stuff, I focus on making the X, Y and Z perfect, individually, and most important, completely modular. Later, those X,Y,Z modules will be plugged in the final project, or shared to the community as plug ins for other things.

#6 - Pygame? That sound fun, but I would still try to learn about #4 before going on this one, maybe mix it with #4 and #5.

Wybiral
June 11th, 2008, 08:20 PM
Right now I'm leaning towards SICP. I've heard it's outrageously good, and it uses Scheme, which is a functional language. I'll try it out for some time before I arrive at a concrete decision.

It is very enlightening. The authors also made some videos of the SICP lectures... They're pretty old, but still very relevant. Unfortunately the site seems down right now, but maybe you can find them elsewhere: http://swiss.csail.mit.edu/classes/6.001/abelson-sussman-lectures/

days_of_ruin
June 12th, 2008, 02:23 AM
A few days ago I decided to find out what I can do to improve my programming skills, and came up with a huge list of things to learn. Now I'm stumped because of too much choice.

I have the following options :

1. Polish my Python skills. I already know most of the language, and reading through some articles and code samples would be pretty enlightening.

2. Learn a functional programming language. O'Caml, Lisp, Scheme, Erlang, Haskell ... again, too much choice. I really want to learn at least one good functional language and write some code using it. I'm lost here.

3. Jump in and start solving some of those "Online Judge" problems. A chance to hone my coding skills, and a chance to dive into compsci.

4. Pick up a good data structures/algorithms book and read it. I found a couple of books which were really interesting and had neat problems.

5. Pick a project and code it. This would be fun, but most of the projects I've come up with are too advanced for my skill set. I'm out of ideas, really. I don't want to contribute to any project (I don't think I have the requisite knowledge yet).

6. Learn to program games using SDL. I remember finding a nice, meaty, up to date tutorial somewhere.

7. Learn Smalltalk.

8. Do something completely different. Learn Blender, or learn to play the guitar. Or something. You tell me.

So, what should I do now? :-? Assume for a second you are my mentor. What would you recommend I do next?

PS : I'm more inclined towards the functional programming/Smalltalk thing, but I can't find any good resources. Point me to learning material if you know of any.

Try pygame http://pygame.org/news.html

ankursethi
June 12th, 2008, 05:12 AM
SICP looks good. I'll try to read it. Any good books on data structures/algorithms? I would like something not too academic. Anything that specifically deals with Python?