Computer Science Canada

having kind of a hard time of really LEARNING cs

Author:  jason_lee_91 [ Sun Jun 19, 2011 1:55 am ]
Post subject:  having kind of a hard time of really LEARNING cs

so ever since my first cs course in my first year of uni, i have been reading many books, articles, and experimenting with many different languages and i am trying very hard to learn as much as i can! haha
the courses i took were 2 entry level programming courses that taught us a functional educational language called scheme and then python.
these courses mostly covered basic logical programs. we learned several data structures, a little bit of runtime. we would get questions such as sorting lists and other numerical/algorithmic stuff.
ive mostly experimented with java and c, a little bit of unix, a tiny bit of php and sql. my interests lie in more higher level languages than lower
the thing is though, since i feel very comfortable with most of the basic syntax and tools such as conditionals and loops and what not, i find that i am having a very hard time getting real insight on these languages.
so i guess my question is does anyone have any ideas for beginner/intermediate level projects that will allow me to apply these concepts that i learn from books? somekind of project that maybe integrates query languages and programming languages for some kind of final project would be awesome.
or perhaps a recommendation of books for more deeper level understanding of languages? a book that goes beyond the actual code. a book that teaches subtlies and applications.
i really know very little about computer sciences. pretty much just coding/scripting. i have a fairly strong understanding of computers in general. and a very high interest level. but very little knowledge and even less experience
any insight, tips or stories that you guys can share is much appreciated!

Author:  Tony [ Sun Jun 19, 2011 11:21 am ]
Post subject:  Re: having kind of a hard time of really LEARNING cs

jason_lee_91 @ Sun Jun 19, 2011 1:55 am wrote:
scheme and then python.

So UWaterloo?

Basically hold on, they need to make sure that everyone can do the very basics. CS 241/251 is where the fun starts.

Author:  Ultrahex [ Sun Jun 19, 2011 1:25 pm ]
Post subject:  Re: having kind of a hard time of really LEARNING cs

IMO (which is not always the greatest opinion I might add); Mostly getting insight into programming languages comes with time, or learning the fundamentals of language design, and implementation techniques of languages.

CS241 is a stepping stone to getting towards understanding these fundamentals but is a very small part of the picture. Note that without the math and proper background there is not much I can recommend. There is always many opensource projects needing development work done which will also help with your coding style (if they are sane open source projects).

All I can really say is stick in there, and things will come and use your time up =)

If you really need something to waste your time, sink some time into a hard problem that has not been solved or is very early in development stages.

Believe it or not, there is many issues still in development life-cycle of most software companies that have not been solved.

Author:  yoursecretninja [ Sun Jun 19, 2011 3:18 pm ]
Post subject:  RE:having kind of a hard time of really LEARNING cs

A couple of ideas to get a deeper understanding of languages:
- Contribute to the development of a language. Many are open source and accept contributions.
- Write a framework (or contribute to one like jQuery or rails) for a language. It's a difficult challenge to make something easier to use for others.
- Write a compiler or preprocessor

Author:  jason_lee_91 [ Mon Jun 20, 2011 10:05 pm ]
Post subject:  RE:having kind of a hard time of really LEARNING cs

jesus you guys really know what your talking about
hahaha i tell you the language i learn and you know where i learned it.

the thing is, im not in cs in waterloo
im in math and finance program which requires a few cs courses
cs is something i do on the side
unfortunately, the only cs i will be taking from now on is a little bit of databases:(
i enjoy math, but i just wasnt introduced to cs until pretty much now

i have the pre requisites for cs 241 so i think i will find some material for that course and start there

also, i have ALWAYS wanted to be able to contribute to open source projects. how do i go about researching this? i just have no background on it

Author:  unoho [ Tue Jun 21, 2011 7:55 am ]
Post subject:  RE:having kind of a hard time of really LEARNING cs

might be off topic but isn't cs241 kinda like low level programming like assembly and stuff? (although it's called functional programming)

Author:  DemonWasp [ Tue Jun 21, 2011 11:06 am ]
Post subject:  RE:having kind of a hard time of really LEARNING cs

CS241 deals with assembly-level code a bit, but mostly to frame the discussion on compilers, languages, syntax and parsers. It's basically an intro-to-compilers. I took it at the same time as CS251, which talks about the hardware and how it handles executing code, and I found the combination more educational than either on its own.

Author:  mikazo [ Wed Jun 22, 2011 3:26 pm ]
Post subject:  RE:having kind of a hard time of really LEARNING cs

If you like high-level languages and have done some object-oriented stuff in Java, trying learning about design patterns. This book is a good place to start: http://en.wikipedia.org/wiki/Design_Patterns

Author:  Roman [ Wed Jul 13, 2011 2:33 am ]
Post subject:  RE:having kind of a hard time of really LEARNING cs

This is totally different, but one of the things that I like to do to get some practice with a language or whatnot is to make some kind of game. Granted, games are a very particular kind of software and a simple game won't teach you as much as, say, making a simple compiler. And yet game development IS programming, and since it has a graphical element you can see the results of your work and play around with it a little bit. Could be an option =P

Author:  DanShadow [ Thu Jul 14, 2011 10:45 pm ]
Post subject:  RE:having kind of a hard time of really LEARNING cs

I would have to agree with Roman!

I think learning from an Object-Oriented perspective is a great way to start, as it gives you a good way to start perceiving programming problems.

For example, you have two objects - a "sword" and an "enemy".
Each has distinctive and unique properties as well as functionality. These two objects also interact in particular ways, causing varying effects to each of their properties.

Ex.
Sword provides +5 damage, and has 30 durability.
Enemy has +2 armor points, and 20 health.

A sword can slash at an enemy, decreasing the enemy's health property. But the enemy's armor points cause a decrease in the sword's durability property.

Yeah, very simple I know - but it's the perspective that is important, the functional understanding of multi-tier software architecture.

My personal suggestion would be to select 2 things:
- the language you are most comfortable with
- a project you would enjoy doing

Rather than jumping into coding (which most do), take an object-oriented brainstorming session. Identify the elements in your projects, their potential properties/functions, how they might interact.
Decide what type of data storage to use (I would always recommend a database).
Design your database tables, considering how your project elements will need to use them, and in which way.

Ex.
Database Tables:
("User_Equipment", shield_item_id, helm_item_id, etc.)
("Items", item_id, armor, special_property, etc.)

I find after sitting for 20 minutes and brainstorming, I can finish project segments in half the time because I dont have to modify things while developing.

If you were to do this over the course of your education, starting new projects, implementing what you've learned into projects, you will refine your programming abilities, and gain a very useful perspective into computer programming.

Of course, as you work on things your neo-cortex will re-wire itself anyway so you'll naturally get more proficient at it anyway Razz


: