| « Futurama characters in vectors | Despre lenevia studenţilor şi elevilor » |
Tips for (computer science) students
I've compiled a list of key-points which in my opinion, can make a significant difference in one's academic life. Since these days are the days many high-school students will pass their BAC exams and face the problem of choosing a university (i.e. determine their future), I decided it is time to publish this list.
Many points are generic, and apply to anyone studying in any field; while some of them are of a technical nature, and they will be of interest to those studying computers and programming.
In spite of the fact that the list is for pupils from Moldova, it is in English because it targets a specific subset of the "soon to be students" crowd; I hope you guys will find it useful.
The beauty of this list is that all the items are simple and you don't need to be a rocket scientist to make it work for you ;-)
- Get a digicam for quick and free photo-copies - there will be no need to carry loads of paper, wait in queue to make the copies, pay for the copies. Paper copies get lost easily, electronic copies can be shared (multiplied) at virtually no cost.
Social stuff
- Interact with your classmates - most of them will be people like you*
- Have your own mailing list
- Play football, go to movies :-)
- Use the digicam not just for copies ;-)
Information
- Get yourself accounts on news sites and get your information straight from the source
- Watch the blogs of people who are known to have done a lot for the community, or have a great impact on it (ex: Oldnewthing, Bruce Schneier, Diomidis Spinnelis, or XKCD - high-tech humour with grains of truth all over it)
- Sign up on Slashdot and read real comments written by people in the field
Books
- English must become your mother language
- Have your personal repository of ebooks, consult them when needed
- Buy real books from places like Amazon, or find an alternative source; nothing beats the feeling of dead trees in your hands
Software Tools
- Learn how to do things with a simple text editor and without an IDE
- Don't get too involved with Microsoft tools, study alternative software and learn to use other instruments (ex: Inkscape, Docbook, Linux)
- Understand source control mechanisms
Learn Python
- In the UTM curriculum you have TPC (tehnici si protocoale de comunicatii) before you have parallel and distributed programming, how can you write multi-threaded servers if you have no experience with threads?
- you'll learn how to write readable code
- it has high-level libraries for many things you need at the uni
Sleeping habits
- Learn how to sleep in public transport
- Quick naps during breaks
- Sleep securely(tm) during useless classes
- Or carry stuff with you, to keep yourself busy and productive in such cases (books, PDA, etc)
Have your pet-project and do everything for it
- Documentation
- Source control
- Testing
- Debugging
- Promoting
- Artwork
- Support
- Porting to other platforms
- Deployment
- Web site, community, blog, etc
Professional aspects
- Write your CV and update it on-the-fly - so that the copy you have at the moment is always a fresh one
- Establish contacts with local companies, meet people who work in the industry
- Get involved in various projects, accept to work for free as long as you can improve yourself skill-wise
- Get a job you like as soon as you can (note that I wrote "one you like", not "one that pays a lot")
Things I didn't do, but think are important
- Learn TEX, Docbook; don't write your theses in Word
- Find an open-source project and contribute to it
- Learn Brainfsck
- Listen audio books on your way to the uni and back
Notes:
- This is not a complete list, you shold fill in the gaps with other tips; I only wrote the things I thought would not be evident to others, or that in my opinion require an emphasis. I repeat, this list is by far not complete;
- Of course, there are many other arguments that support learning Python. Mentioning all of them here is beyond the scope of the list, one day I will write about this in detail.
9 comments
"Please do learn algorithms!!!"
"Please do learn how to analyze the algorithms!!!"
"Please do learn something"
...
A high level language like Python helps you focus on ideas, and change the project into a working state.
- Don't get too involved with Microsoft tools
- Learn Python
- Don't write your theses in Word
are you serious? of course you always need to keep growing in both sides, just learning some tools and hiding in a rock is not going to work, but the way you said it is too much I think... anyway other than that I think the tips are a nice touche
In the case of UTM, the environment is definitely Microsoft centric, as all student workstations are running a flavour of Windows. Because of that, the students' knowledge is biased towards Microsoft products.
Write a thesis? Use Word. Make a spreadsheet? Go for Excel. And so on... it is quite difficult to find a student who will use another tool. This is further enhanced by the fact that AutoCAD, 3D Studio Max, and other programs required by the curriculum are for the Windows platform.
[Side note: if BSA forces UTM to pay for everything - the university is screwed big time]
Programming - it is all about Win32, except the cases in which we wrote simple operating systems, or generic stuff that is simple enough to be compiled everywhere. None of the courses we've had taught us about portability, and I think there is a great deal of graduates who don't even suspect that their code may not work at all on another OS (dumb students? or is it the fault of the university?).
I'm not saying they should ditch Windows and everything else it stands for, I'm saying that they shouldn't be narrow-minded and spend some time tinkering with other systems and other tools. Surely, they've heard about Linux, or Inkscape - but are they skilled enough to be productive with these as they are with their Windows equivalents?
In the real real world, not everyone uses Windows. If they do, do they use it honestly? I have 4 computers at home, 2 of which run Windows, but only one of them is licensed. If you're carrying a Microsoft flag, do you also honestly pay for all the Microsoft stuff you use?
Regarding Python, I didn't say "forget everyhting else and learn Python", I said "learn Python". Once you do, it will be easier to decide which language to use for each task; I predict people will be biased towards choosing Python, because it saves a lot of time. You can recommend another "favourite language", it's just that my experience tells me that Python is a safe bet. In the future I will try to find some time to cover Python in detail and explain why I like it so much and why I think they should teach it in schools instead of Pascal :-)
Cat despre somn, e putin utopica ideea de "invatare" in acest caz [este logica oare expresia "putin utopica"?] dat fiind faptul ca oamenii au bio-ritm-uri diferite, iar o incercare de a-l schimba poate avea repercursiuni asupra sanatatii care se vor lasa observate in the long run. Asa ca un sfat care le va ingloba pe toate este sa monitorizati orele la care vi se face somn si sa va programati activitatile in asa fel, incat sa coincida perioadelor zilei/noptii cand va simtiti cel mai "energic".
Si ca sa nu uitam de Wikipedia, acolo pot fi gasite niste articole destul de interesante cu referire la somn si sleep schedule.
What I meant by algorithms is something else. The point is that the algorithms represent the logics or intuition. For instance, how many students from UTM know how the quicksort algorithm works or how many students know how to work with binary trees in an efficient way. They are mostly taught how to use them (algorithms) but not their structure.
For your second comment the problem related to Windows is mostly due to crappy professors. I can tell you that in UTM there are profs who don't even know how to use a PC with Windows. More than that most of their "teaching tools" (i.e. AutoCAD, PCB crap etc) work on Windows.
"Learn LISP or any other functional language."
VERY important. In Python or Ruby or C# or C++0x or _whatever_language_ there are lambda expressions, which contribute to a functional style of programming. This is good, but it's not enough.
A lot of languages today (again, citing Python or Ruby) have quite a great commitment to lists, which again is very good, but not enough.
Some languages tried even to implement lazy evaluation techniques or monads or _add_a_functional_feature_here_, but they're still far from the high-level-ness of functional languages.
Ok, LISP is big, learn Scheme then.
Ok, Scheme is weird. Then, in case you want the ultimate beauty - try Haskell.
Unfortunately I haven't got the chance to get to learn a functional programming language and really use its beauty to get stuff done in an elegant way.
For those of us who have a procedural programming background, Python is a good starting point.
Learning Scheme is in my "to do" list though.
Did you use any of the languages you've mentioned in your university assignments? If yes, which discipline? And what do the programs do?