How do the Elite code?!



  • *wow this was really long, I'll edit it another time (Im' at work right now) sorry guys 

    Now that I've hopefully got your attention,

    I wanted to ask a question... I have completed a Computer Engineering Diploma as well am currently on the verge of completing a Telecommunications / Wireless Degree and I have alot of hard/soft skills.  Hard with robot creation using simple 8086 processors and having to code for them as well.  Also I have have learned a ton of languages (the school ones really.. C,C++,Java,Shell scripting, Assembly, Sql, some ruby and I'm prolly' forgetting alot) but I'm at a loss right now with direction and coding practice.

     
    Direction meaning yeah I can code, and I can code in any language I want because it's all just a matter of syntax in the end (yeah some languages have there own little quirks but all in all it's syntax). but I don't think I REALLY know how to code yet.

     I mean, I'm the type of learner that loves to dive into things and trial and error my way into understanding my boundries within a language and how methods work and so on and so forth. Yeah I dont' read manuals either if that's what you were wondering =D.  But When it comes to programming I see all these models being drawn and all this planning being done and I just don't know how to do it (prolly' because I went to college for the majority of my programming knowledge and it was all hands on).  So I feel lost.  Like there's an entire side to programming that I'm missing, which can make my programming better, more efficient and have me waste less time trial + error'ing.

     

    Along with this, I want to point out that it's not just that I don't KNOW how to do them, as I'm sure when I enter a REAL job (these coop jobs TRULY suck..... ) I will learn all these models and pre-planning, but I wonder how long it's going to take me to truly master them.


    One last thing (oh my this is quite long...) I've just started learning programming languages on my own (started with php, seems like I'll need it in my immediate future) but I'm not sure if I"m giong about this the right way.  

    Im' starting chapter by chapter *yawnnnnnnnnnnn* this is a for loop... this is an if statement.. yah along the way I learn key differences in the language but holy moses this is boringggg, how do you guys study languages on your own? what's the best way to do so (I'm doign so through books, I've done some langauges online but there's no real good examples to follow I find.  Although Ruby's Comic book thing was awsome lol)

     

    I guess I just feel lost, maybe i'm trying to grow up before my time but I'm 23 and I already feel it was a waste to go back for this wirelress telecomm degree (they gave me 2.5 years of a 4 year program, and I have 3 coops ughhhhh)   so I don't feel like I have time to waste. I just wanted the extra few K the degree will give me hopefully (I'm canadian btw so every $ counts.. although I do have american immigrancy as well so I can work anywhere in teh states.. yay .. but I like canada)

    I'm just looking for some guideance or general direction from some who've been in the game for a while.

     

    Thank you and honestly I apologize for making this so long. 

     

    Thank you to anyone in advance who replies 



  • @astroboiii said:

    Direction meaning yeah I can code, and I can code in any language I want because it's all just a matter of syntax in the end (yeah some languages have there own little quirks but all in all it's syntax).

    Plain wrong. There is a small set of semantic constructs that exist in most languages (like variables, assignments, if, loops etc.) but many languages have distinctive powerfull constructs that make it possible to write programs which would be much harder to write without. Ignoring those features means your code will suck. Additionally, in many languages there are conventions and idioms that you should know, because that's "how it is done". Ignore those and everybody else will have problems reading your code.

    The best way to learn to code well is to read and understand good code, then write good code yourself.



  • @astroboiii said:

    How do the Elite code?!

    With their junk. Johnson. Thingy. 

    Yeah, that.

     

    Next?



  • @ammoQ said:

    @astroboiii said:

    Direction meaning yeah I can code, and I can code in any language I want because it's all just a matter of syntax in the end (yeah some languages have there own little quirks but all in all it's syntax).

    Plain wrong. There is a small set of semantic constructs that exist in most languages (like variables, assignments, if, loops etc.) but many languages have distinctive powerfull constructs that make it possible to write programs which would be much harder to write without. Ignoring those features means your code will suck. Additionally, in many languages there are conventions and idioms that you should know, because that's "how it is done". Ignore those and everybody else will have problems reading your code.

    The best way to learn to code well is to read and understand good code, then write good code yourself.

    You're both right. I think what astroboiii (damn, that's a *really* gay name, you should change it. Seriously) was implying was that it is easier to move from one language to another because they all have a single foundation. You are also correct that the only way to make truly *solid* code is to know the platform and its quirks. I don't think your code will necessarily be guaranteed to suck if you stick to basic principles, however.



  • hah guess I don't know much at all then. 

    if you mean things such as putting a $ in front of a variable or not and different ways of forming for loops and the like then I really think that is STILL the same thing packaged in a different way.  I'm not arguing which one is better than another just that if you have a solid understanding of one way, then learning another will not be as difficult.  Just a matter of playing with it and getting familiar and comfortable with it.  Although I could be wrong and you may be talking about aspects of a progarmming language I've yet to encounter in my programming career.

     

    Also I think I may have over-generalized, yes I know some programming languages have there own special little tools that are effective at doing specialized things and that's why they are used for such reasons but again, I don't consider those anything that will deter me from learnign a language, or cause me to not learn one.  I still believe that having the basic tools will aid me in understanding any new construct/idea or whatever it may be that is new.  I'm not being cocky, I'm just being realistic, I hope I am understanding what you mean.

     

    and yes your correct every langauges has it's own style which is the standard and is legible to all others who will review the code, and I definitely follow those everytime I learn a new language.  that is a must for sure.

     

    "The best way to learn to code well is to read and understand good code, then write good code yourslef."

    By good code do you mean well written and efficient/effective? or compelx constructs of a certain language which I can learn from and adapt and learn by emulating them in my own way?  If the later then would you suggest getting books on the topic, such as "how to REALLY code in C++" etc etc, you know, those books that tout showing you THE most effective way of handelling certain situations which come across in respective progarmming languages? or would you say, deconstruct popular open-source code and simply go from the bottom-up and learn it that way?.

     

    Thank you for your response.

     



  • naw, not changing my nick because it has relevance to me.  Doesn't define me as a person anyways so for those that would judge me based on that don't know me anyways so what the hell do i care?.  thank's for being professional "whiskey, tango.. foxtrot"... I would comment on that name, but honestly I'm not here to be a fucking loser and troll =D.

    Thank's for the response though, much appreciated (seriously, you did have a valid point =b~ )



  • Short answer: get a job.

    Slightly longer answer: sounds like you're the kind of programmer who learns by doing.  You need a job so you can have something to work on, something you can put on your resume and say "I programmed in x on y project", rather than, "when I was in school we did this project...".  Chances are you'll have architects, analysts, leads, seniors, project managers, managers, and peers around to help you get on your feet, so don't expect to have to know everything before you start getting experience.  Go forth and write crappy code that we'll all point at and laugh about later.  Now off to the job boards with you, and good luck.



  • Programming is definitely one of those things that you get better at the more you do... so, by all means, write as much code as you get the chance to.  Try other languages, even if just for fun.  Spend some time in LISP and see how much it's like the other languages :)   (Oh, I didn't see much database stuff up there...some good db skills always come in handy) 

    But going beyond syntax, there's a whole world of issues involved with learning how to _design_ software.   Sometimes this is in terms of developing object models in C++/Java/C#/Some other OO language, sometimes it's about algorithm design and the math behind it, sometimes it's how various parts of a multi-part system fit together/interact.   It's skills like that which really elevate a coder into something more.  When I am conducting interviews, only the first 1/4 (if even that much) or so is about syntax & knowledge of language features, after that it's all about design.

    -cw



  • @astroboiii said:

    if you mean things such as putting a $ in front of a variable or not and different ways of forming for loops and the like then I really think that is STILL the same thing packaged in a different way.

    Yes, of course. But e.g. in some languages you can do amazing tricks with reflection. C++ is well-known for its templates. Some languages have lambda expressions. That's the kind of stuff you have to learn even if you know the 1+1.



  • Thank's again to all who posted.  It's good to know there's people willing to help out.

     Oscar L. : Your right I need to get a REAL job.  I'm sure I will develop alot from there.  These coop placements I've had I've had nothing short of being dropped into a random desk (this current position has me in a lab with me being the only real techy, the rest our engineers and dr's constructing experiments behind me and building instruments for the government lol so I've basically been "on the job" learning all my recent languages (MFC architecture, VB, linux network administration).  So I definitely can't wait  to get a real job.  Although if it's anything like these jobs... I'm definitely going to hate my life haha.  ANd yes I will continue to learn languages for the hell of it as my drive lasts lol.  I hope I don't get brain drained/ burned out early on in life =D.

     

    CodeWhisperer: I will check out LISP (i have heard of it before) and see what you mean, I'm sure it'll make my head spin much like they say cobalt does... or was that perl?....  In any case as an employer for a student fresh out of school would you still expect some design knowledge?  I know you have to know how to  write a good lucking  and well put together code, but I mean outside of that what can you expect in terms of design? (I suppose in University this is taught in great detail, many friends of mine also deal with similar matters)

     

    AmmoQ:  I remember templates, those were fun in a masochistic sort of way =D, as were the first time I learned pointers (very bad teacher in High school...).  I think I just may get some of those books or even check out advanced tutorials in languages I've already learned and see what else I can grasp of them that would be expected of me from an employers standpoint.
     



  • @astroboiii said:

    CodeWhisperer: I will check out LISP (i have heard of it before) and see what you mean, I'm sure it'll make my head spin much like they say cobalt does... or was that perl?....  In any case as an employer for a student fresh out of school would you still expect some design knowledge?  I know you have to know how to  write a good lucking  and well put together code, but I mean outside of that what can you expect in terms of design? (I suppose in University this is taught in great detail, many friends of mine also deal with similar matters)

    >g<  It's COBOL :)   Actually COBOL was designed to be fairly readable...where as my old boss used to refer to Perl as a 'write-only' language... 

    Not all that many people use LISP day to day (though there are some)...and I've never really _used_ it at a job...but it was one of the earliest languages and there's a lot to learn by looking at it in that context.  I sat down a couple months back and wrote my own LISP interpreter based on the original programmer's guide (including hand written notes) from 1962 or so.  It was a great learning experience. 

    As for the design knowledge, it's the sort of thing you'll spend the next 10 (or 20, or 30) years learning... but at least having considered it will make you more attractive to employers and having demonstrated some applied knowledge will get you put on more interesting tasks (and make you less likely to contribute to the rampant WTFery that is made fun of daily here.   But, actually, it's not the sort of thing that university teaches very well... when I was going through, there was just one class on software engineering, which was half boring theory and half annoying team-work.   It led me to an oft repeated phrase:

       "Software Engineering is the process by which all of the fun is sucked out of programming"

    I hang my head in shame at that now, but it was quite heartfelt at the time.  Now I'm all about software architecture & engineering, and see 'coding/programming', 'engineering' & 'architecture' as distinct skill sets and ranges of vision.  "Software Engineer" isn't just a title, or at least it shouldn't be, it means that you know how to design software and to show that your design is a good one.  "Coding" means you can write code until the problem seems to be solved...quite a difference in between.

    But, now we're just on to one of my pet peeves :)

    -cw



  • "write-only code"... One day, I too will learn Brainfuck. :-)  



  • @Emyr said:

    "write-only code"... One day, I too will learn Brainfuck. :-)  

     

    I'm pretty sure Brainfuck is a chmod 111 (Execute-Only for the *nix impaired)  language for most people ;)

     

    @astroboiii said:

    Direction meaning yeah I can code, and I can code in any language I
    want because it's all just a matter of syntax in the end (yeah some
    languages have there own little quirks but all in all it's syntax).

    Uhhh, no.  What classes did you take in college because they really should have introduced you to some programming language theory.  Please go write an algorithm in LISP, C, Java, and Prolog and then come tell us that all languages are the same other than syntax.  Also, I have a hard time believing that you didn't take some kind of design class in college. 

     

    But enough of this negativity I'm spouting.   My suggestion is to make yourself a side-project.  Make a GUI that does something cool.  After you have worked a whole bunch on that you will realize that you didn't really understand the whole Model-View-Control thing and will realize that a lot of what you did was stupid.  THen do another project.  It won't be great, but it will be better!  

     



  • I knew I was going to get flac' for having said I could learn any programming language.  No matter what you guys say, I still beleive I can learn any language I want.  Allright I'll credit you guys, maybe it's not all in the syntax, or atleast it WASN'T back then when LISP was "cool", but noawdays that's all I'm finding, but again there's so many languages I haven't looked at so I won't generalize.  But I can still learn whatever I want, how LONG it takes is another factor =D.

     

    I'm going to try and write some random gui's (without IDE's..? ) in languages I see fit and try and build from there.  However, I don't know if I'll learn much model-view/design practice from this as, I'd be writing the gui in my own way.  Maybe If I looked at examples while coding I'd adopt a proper design or something, maybe some crazy hybrid =\.

    The only problem I find, is motivation.  As much as I love computers, working and studying (for no real reason other than personal development) is kinda hard.  Weekends are a complete bust as I'm out having fun at nights, (I do make time to study during the afternoons some of the times).  But all in all, $$ has never been a huge motivator.... even though its' the sole reason why I want these assets to begin with (well that's not true, I truly do love computers in general, but you know what I mean.  ANything to help the future funds =D).

     

    Again, thank's for all your help guys.  Still unclear on how I'll learn or atleast get an understanding of a proper design process/concepts or a model-view process.  Maybe some suggested reading?  Because other than actual career jobs, I don't see me learning it any time soon while in shchool, even through coop jobs =| 



  • Thank you, Oscar, for taking the words out of my mouth :) Get a job and get experience.

    At my university, all the different CS departments have their own pet projects, ranging from distributed operating systems to middleware systems to workflow management systems to compiler research. At the project I'm working on (this is a 'low' paid student position) the Ph.D. candidates work on their theses and students implement big parts of the design. If your school has any kind of research projects, then surely they'll have work for you. Sometimes they even end up with useful software (BSD unix from UC Berkeley, wu-imapd/ftpd from Washington Uni, Kerberos and who knows what else from MIT, and so on.)

    If the system is reasonably complex, you'll learn a lot about design and architecture, teamwork and much more. My group is building their project on top of the Eclipse SDK, and that's a very complex piece of software by itself. Working with it you see a lot of different design patterns, lots of common tasks that are provided by libraries, many very generic interfaces shared by all components, dynamic runtime configuration of pretty much every aspect of the system, plugins, and so on. You could get a book on design patterns, but seeing them in action is just as effective.

    If you really can't find a project that way, you can always force your way into a development "team." Pick any big open source project, download the source tree, find an open bug in their bugtracker and get to work. Of course, you'll have to understand the software first and you'll have to study the overall design and the interactions between the components.

    When you understand the design of Apache2, or OpenOffice, or Firefox, or KDE or Eclipse then you should know which designs work where. Of course, in different languages  you'll find different constructs. Firefox, coming from Netscape, use the naming and code conventions from Netscape Navigator. Kde, build on top of the Qt toolkit, uses an entirely different subset of C++. Eclipse has all the quirks that exist only in the java world. Other languages are yet again different. Maybe you'll fall in love with a python or ruby app, or maybe even haskell or lisp. (just don't ever go near php.)

     



  • astroboiiiiiii -- sorry about the name crack; it just brings on thoughts of "angelsboi" from another forum, and I remember that flameout far too well.

    /me shudders.

    Anyway, here's a great example of why you need to learn the differences between languages:

    In the .NET framework there are basically two data types: value types and reference types. Their fundamental difference is in how they are allocated (value types are *always* allocated on the stack or inline as part of another data type, and reference types are *always* allocated on the heap) and how they are passed to methods (with value types the entire value is copied, while with reference types only the reference is copied).

    You do understand the difference between the stack and the heap, right? Good.

    Now, in the .NET framework, it's very easy to accidentally slip a value type in when you thought it was a reference type because a struct is a value type. Most people coming from a C++ background think it's just like a C++ struct (i.e. just another way of writing a class). Read the following C# example:

    MyStruct structy = new MyStruct();
    MyClass classy = new MyClass();
    this.UseBoth(structy, classy);

    structy and classy are instantiated in your code using the same syntax, but structy is on your stack, and classy is in your heap. The call to the UseBoth method results in structy being *copied* onto the stack for use by UseBoth. If structy happens to be a particularly large data type -- perhaps it has, for some entirely arbitrary and highly WTFish reason, an array of 1000 doubles -- the memory footprint for your code will begin to bloat, resulting in a possible stack overflow.

    Compare this to Java. In Java, there is no real equivalent to a struct -- all user-defined data types are classes and allocated on the heap. Primitives (ints, floats, etc.) are equivalent to value types, but the user cannot define their own value type. Thus there is no possibility of a stack overflow in that way. Oh, you can still overflow the stack with recursion, but that's another puppy! Why, then, did MS create a user-definable value type for .NET? Well, mostly because an equivalent is in C++; in C++ any datatype can be either a value type (inline instantiation) or a reference type (the dreaded pointer). But why is it a Good Thing (tm) to have that option?

    At some point in your schooling, you should have come across the concept of the Principle of Locality of Reference. It basically states that if you just used it, you're more likely to use it again. It's the reason we have a higher-speed memory cache built onto CPU chips and cheaper, slower, secondary memory elsewhere, and sometimes a third intermediary layer. If you pass a value type to a method, a copy of it is placed on the execution stack, which is pretty much guaranteed to be in cache memory. If you pass a reference type, however, there is no guarantee that the reference will be in the cache, which could result in a fetch to secondary memory. A value type is there to exploit caching schemes that exploit the Principle of Locality, resulting in a possible net speed increase.

    Examples like that are why it really helps to *know* your platform. If you stick to basic OOA/OOD principles and grok how CPUs work in general, you'll be sound as a pound nine times out of ten. But if you don't really know your platform, that last one can rear up and bite you on the ass. HARD.  

    My advice: keep learning. Never stop. Don't focus on any particular language, read up on most of them. Read the trade magazines. Pick up books. If you can't afford to buy them yourself, talk your local librarian into it -- they're usually fairly accommodating about computer books. Borrow them from friends. Join a local user group. Join more than one! Join the JUG, join the NUG, join the PUG. Whenever there's a free presentation on something, go to it. You don't have to take notes, just go and absorb what they say. Always keep your eye on the "next big thing". If you want suggested base languages, here you go in alphabetic order:

    C
    C#
    C++
    Java
    Perl
    Python
    Ruby
    Visual Basic

    Yes, Visual Basic, too. You don't have to like it, but it *really* helps to know it, especially if you have to deal with somebody who "only knows VB".



  • nandurius - yeah alot of people are saying just get a job! lol.  I'm trying to take the most I can out of these coop jobs but omg there so BAD.  Could be my perception buth onestly there so brain numbing. 

     
    I think I may take your suggestion and start actively participating in an Open source development project of some sort.  My only problem with that is I'm not so sure I can help because I'm sure all those that step into these types of projects know there stuff WELL, and i'm not so sure I do... (which is the orininal intent of this post =D)  but I'm willing to give it a shot and seew hat develops. 

     

    Also I may take a look through the source of firecod and other such open source apps to get a general idea of how their designed.  Guess I shoul stop askign how designs are implemented and just start LOOKING at examples.  And how come you don't recommend php? I'm learnign that right now lol it's not so bad... is it too easy? or a completely different type of coding since it doesn't work on as low a level as say C, or to a lesser extent (in terms of level) java?

    Whiskey Tango Foxtrot? Over. - no worries, I'm not upset about the name thing at all trust me =D.
    I do know about the heap/stack and have worked with mostly stack since heap was transparent to me when I was working in in visual studio on some MFC project (maybe it wasn't even using the heap... altho I'm sure it was somewhere within that code... (this is why I don't like ide's that much.. i have no clue what's really happening =\) but they do speed up develop times...


    and yes your right about locality of reference, we did learn that in terms of cpu - cache so I do undersatnd the concept very well.  
    You bring up a very good point though with the mystructy / myclassy example.  These are platform specific things that I do not have a good handle of yet.  I do know my Big endian vs Little endian on windows / 'nix if that counts =D (yay).
    but I have been a 'nix user since slack ... shot I dont' even remember but a LONGGGG time like jr. high or so, and windows as well (you can't completely escape it =D) so I hope that aids me when it comes time that it's crucial for me to have to
    create platform specific code. I think this is another area I will develop further in because you brought it up and I dont' erally know much in the area.

    as far as your list goes, I know 50% of the languages listed.. can i count c# too since I know java very well???? =D
    but *knowing* a language in my mind raelly means I've mastered it to the poitn where I can build small apps that wil help me
    in every day life, nothign to the extreme point where I could be put at a well paying job and do the job flawlessly with litle learning, ofcourse not...so i guess
    I'm an amateur in all of the 4 that I said I know lol.

    Lot to learn I guess....


    Thank's for all your suggestions/guideance your helping me more than you all know =D



  • oh one other point to add, I was considering joining JUG but I didn't
    because I felt there wasn't much I could contribute but I thin I wil
    join it and atleast attend and try to soap up some knowledge if I can. 
    Gues it's not all about what YOU know but how much you can learn from
    what OTHERS know, which is why I'm here in the first place =D



  • @astroboiii said:


    can i count c# too since I know java very well???? =D

    That's a bit like asking "can I count C++ too since I know C"?

    Of course C# is relatively similar to Java, but IMO it pays to know the differences well. Most things that work in Java work in C# too (anonymous classes being an exception, correct me if I'wrong) but many things are done differently in C# if you do it right. For example, getters an setters are Java-style, in C# you use properties. C# has different rules when to use uppercase and lowercase identifiers, but that's mostly syntactic sugar.



  • I don't think anyone said (or implied) that you couldn't learn any language you wanted to learn. 



  • sorry, your right no one really said anything along those lines, just a knee-jerk defense mechanism kicking in =\.

     

     



  • @astroboiii said:

    But When it comes to programming I see all these models being drawn and all this planning being done and I just don't know how to do it

    99% of what you're seeing is cargo-cult behaviour from people who don't really know how to do it that are trying to emulate those who do. Drawing models is not design, it's a mechanism for explaining your design to another person. The really important part is the stuff that you can't see them doing; don't confuse the two (anybody can learn ways to explain an idea).

    So I feel lost.  Like there's an entire side to programming that I'm missing, which can make my programming better, more efficient and have me waste less time trial + error'ing.

    This is actually quite unusual. Most people never realise that this is true until it no longer is.

    Basically: it takes about ten years to gain expertise in any specialist field, and programming is no exception. The true understanding of high-level design is one of the *last* things you will obtain. You can estimate roughly how far along you are by counting how long you've been doing it (it seems odd, but this really does work, assuming you're the kind of person that will ever be able to do it - not everybody can, some will work for 30 years and still not "get it"). You won't really understand what I'm talking about here until you've already done it, but it'll make more sense to you over time.

    Software development is not a science, it's an engineering discipline. There is no way to learn any engineering discipline except by doing it (lectures and books can be extremely useful aids, but you gain nothing from them unless you're actually *doing* the stuff in them). Some of it is an art form, and nobody knows of a method to learn that, but you don't *need* to (it's like the difference between an architect who designs a functional, efficient building and one who designs a building which is all that, but also inspiring).

    started with php, seems like I'll need it in my immediate future

    Well, my condolences on your impending suffering. If languages were medication, PHP would be an excessively large suppository - it is painful to use and ends up covered in crap.

    Im' starting chapter by chapter *yawnnnnnnnnnnn* this is a for loop... this is an if statement.. yah along the way I learn key differences in the language but holy moses this is boringggg, how do you guys study languages on your own? what's the best way to do so (I'm doign so through books, I've done some langauges online but there's no real good examples to follow I find.

    You don't know anything about any language until you've written multiple applications in it. Books never tell you all the ways in which a language sucks; it's a kind of brain defect in anybody who would want to write a book about a language, but utterly vital knowledge for writing an application well. A book can be a useful introduction and reference, but you should start writing something as soon as you possibly can.

    BUT: whatever you write the first few times is going to suck. Please don't inflict it on anybody else. Write stuff that you can afford to reimplement later, when you understand why your first attempts were so wrong.

    can i count c# too since I know java very well?

    See above: you may know a lot about the nature of C#, but what you don't know is any of the myriad ways in which C# really *sucks*. In general, and it's true for C#/Java, any derivative language sucks in new and entirely different ways from its immediate ancestors. This is because the language designers attack the immediate observed problems in the previous languages, and in doing so, invent strange new kinds of problems to replace them. (Strangely, people think this is a form of progress)

    @Whiskey Tango Foxtrot? Over. said:

    (damn, that's a *really* gay name, you should change it. Seriously)

    Since we're on the subject, yours is pretty damn stupid too. (I'm not disagreeing with you or anything, I'm just saying...) 

    @astroboiii said:

    I think I may take your suggestion and start actively participating in an Open source development project of some sort.  My only problem with that is I'm not so sure I can help because I'm sure all those that step into these types of projects know there stuff WELL, and i'm not so sure I do... (which is the orininal intent of this post =D)  but I'm willing to give it a shot and seew hat develops. 

    I used to be a serious free software developer. Trust me, almost all of the people that step into these types of projects are of dubious competence, limited intelligence, and some of them are just retarded blowhard arseholes. Excellence is fractionally less rare in free software, but it's still damn rare.

     Also I may take a look through the source of firecod and other such open source apps to get a general idea of how their designed.

     

    Firefox? It's a stunning example of bad design, for mostly historical reasons (tracing its history back to netscape and even mosaic). It's also really foul code. This is, sadly, a property of most free software applications you are likely to run across - but firefox is one of the worst, there are very few things out there which are quite that nasty.

    Always remember Sturgeon's Revelation: "Ninety percent of everything is crud". For anything that you may be looking at, there is a high chance that it sucks. You will have to learn for yourself how to tell the difference (by looking at a *lot* of different things and comparing them). It's safest to assume that everything is bad until you see why something isn't. The best way to learn this is to look at things and try to work out why they are wrong (if you can't see why something is wrong, that just means that you can't see it, not that it isn't wrong).

    Another useful rule: "The first idea you have for how to do something is probably the worst one you will ever have. Later ideas are not necessarily better than earlier ones, but for whatever you are currently doing, there is a better way". Learning how to distinguish between better ways and worse ways is one of the more important skills (as is learning when to suck it up and stick with what you're currently doing, even though it's worse, and you won't get that one until you've screwed up on it several times).

    The only problem I find, is motivation.  As much as I love computers, working and studying (for no real reason other than personal development) is kinda hard.

    Learn to see all the ways in which every application you are currently using is a piece of crap (Sturgeon's Revelation tells you that these should far outnumber the ways in which it is good). Use free software as much as possible. Then try to fix some of the crap. Hatred and loathing make good motivation, and you will *never* run out of things to do.

    Oh, and learn how to type accurately without paying any attention to it. Compilers are picky about punctuation.

    @tster said:

    I don't think anyone said (or implied) that you couldn't learn any language you wanted to learn.

    But anybody who thinks they can learn any language needs to spend some time with APL - and if that isn't enough, INTERCAL and Malbolge.



  • @asuffield said:

    Drawing models is not design, it's a mechanism for explaining your design to another person.

    I'd like to disagree with you slightly here:

    Drawing models is not design, it's a mechanism for explaining your design to somebody, [b]most importantly to yourself[/b].



  • asuffield: Thank's for all the insight.  You make some interesting points.

    "99% of what you're seeing is cargo-cult behaviour..."
    I guess your right about the models/design aspect.  I'll learn "how to tell people
    what I plan to do", on the actual job I'm working in since that's when I'd be
    using it, otherwise, people dont' really give a damn what I'm coding so no explanation
    is needed =D
    This is actually quite unusual. Most people never realise that this is true until it no longer is...
    As far as paving a path towards beeing a better programmer, I guess I'm going to try and
    find good examples of code archetypes and just emulate/adopt those types of ideologies
    into my thinking (ofcourse copying is boring, so I'll just come up with my own style =D).
    But yes your right this is going to take my entire career to do huh? No point rushing it.  Or
    even think that it CAN be rushed.  I've only been coding since the beggining of jr. high and
    I'm 23 now so it hasn't been that long yet I guess, since I only started seriously learning
    around end high school - college level.  Honestly I hope I'm a good programmer, but I feel
    that how I learn things (dive in and feel my way out) leads to a longer learning curve,
    anyone else learn the same way who can give me some insignt?

    "Well, my condolences on your impending suffering..."
    Was choosing php really that bad an idea?  I see it everywhere, jobs are posted all over the
    place for web developers with these minimal skills (xml,html,xhtml,css,php,asp etc etc) so
    I just figured why not learn php and then go into j2ee since I neer took the time to learn
    html because it seemed so boring, and I've never created a web page before in my life.  Just
    figured it was about time I saw what all the hub-bub on the net was all about...(I've created
    web apps with java before but nothing that had anything to do with a single web page.  
    Don't understand why people dog on php so much? As I'm learning it, (Mind you I'm seriously
    only at the beggining still) it seems like every other language right now.  Later on
    I keep hearing that the whole database connectivity thing as a god send (actually the book I'm reading
    keeps on pressing this issue *we can do this better by using a database etc etc).  What's
    with all the hate on it? (I don't love it, but don't see a reason why it CAN'T be used, or
    would be frowned upon as a language is all...)

    "You don't know anything about any language until you've written multiple applications in it..."
    One thing about going through books, this is my first real book experience outside of being
    guided through the vital parts of a book by a teacher.  I don't know how to sift through the
    BS.  I'm going page by page.. which is boringggg, I know array's and for loops etc, but I
    am to afraid to skip a chapter/page because Ifeel I'm giong to miss something that is particular
    to the language I'm learning. One thing I've started doing though is just stopped reading the
    explinations and just started looking at the damn code.  9/10 times I"ll get what's happening,
    if I don't, then I"ll read.  Will I gain a solid understanding by going through the entire book
    this way? Is this common practice? would one do this at MY age with my level of knowledge?
    also with every thing that is taught in the book, I write it and manipulate the way I see/believe'
    it would work so I use them in ways the book isn't teaching me just because I assume I know what's
    going on.  Again 9/10 times I'm correct.  And this illustrates that I'm not only reading but
    actively coding along with the book as well.  Slower I find though... maybe I should STOP diong this
    and just focus on major aspects of the code and play around with those, or just do the projects
    written in the book.

    "you may know a lot about the nature of C#, but what you don't know is any of the myriad ways in which C# really sucks...."
    About the c# jab, I guess jokes don't come across as well as they would if I would've said
    to someone and you would've seen my expression =D, I know I don't know c# just because I know
    java.  But I do guarantee one thing (yes I'll prolly' be flamed for this as well), but I
    will be able to pick it up alot quicker because I know java. ( gasp )  And I totally
    agree with you on the whole updates create more problems then they solve notion.  Look
    at java updates....

    "Firefox? It's a stunning example of bad design, for mostly historical reasons (tracing its history back to netscape and even mosaic)...."
    where the hell did I get fireCod? wow I don't even like seafood...Ironic how you talk about
    Sturgeon though though =D.  And hatred is definitely NOT my means of motivation, I am known
    for being a hater, but I don't remember ONE time when I've hated on something... and actually
    tried to make it better.  That's the hater way, we hate and that's it lol.  I think I"m going
    to have to try to make an effort in fixing bugs I come accross in some apps i use.  Maybe
    the plethora of bugs I see in all my linux apps =\ (hey atleast there all free....)

    Thank's for the knowledge, I am in a sponge like state atm. =D



  • I don't think he was making a jab at C#.  I don't think anyone really knows any programming language until they know where and why it sucks.  C is a great language, but it sucks too.



  • I meant my original jab at C# where I stated if that since I already know java, that qualifies me as knowing C# .

    =D 


  • ♿ (Parody)

    Entering late in the discussion here, but I'll take any opportunity I can to reiterate this following point.

    <FONT size=4>The best programmers are those who write code for their successors.</FONT>

     

    Your first priority should almost always be to make your code maintainable by someone who is less smart, less experienced, and knows less about the business domain than you do. At that stage in your career, even though your not "coding it right", at least you (or some one else) will be able to understand what you were trying to do, and go in and refactor it

    You'll eventually learn to "code it right." All that takes is time.



  • I will dominate you


  • That's his way of saying that he doesn't think little things like data structures and algorithms are important.



  • I learn a new language by writing a simple (read: trivial) program that does this.

    Reads in a dictionary text file CRLF delimted;

    Randomly creates letters;

    Makes words with sets of letters;

    Compares these to the file of dictionary words;

    beeps and boops when it is done finding matches.

    So far Java did this the fastest (although i haven't done it in .NET yet.)

     

    I like it because it teaches you how to implement data strutures, quirks of I/O, memory management, searching, all that.

    the java program is about a page, not including comments, btw.



  • > Don't understand why people dog on php so much?

    Go read the "Good Form In PHP" and the "General Concensus on PHP" threads, and you will understand why PHP is junk. Junk that works -- but junk nonetheless.

    Re-iteration of made points:

    Build things, build things; then build more things. Not necessarily applications, but also scripts, programs, algorithms. Try some math problems that require the raw calculating power of a computer to solve. Make it efficient. Then make it more efficient. Then learn another language that actually does it right. Include experiments with XHTML and CSS.

    Do you have a sandbox folder on your hard drive? :) 



  • @dhromed said:

    Build things, build things; then build more things. Not necessarily applications, but also scripts, programs, algorithms. Try some math problems that require the raw calculating power of a computer to solve. Make it efficient. Then make it more efficient. Then learn another language that actually does it right. Include experiments with XHTML and CSS.
    Yeah, build things is the best tip you can give.

    Just build something you've always wanted to build. The first time it will only function for 10% (if you are lucky) but the learning experiance will be great. Just because something is build already does not mean you cannot build it yourself. I've implented compression stuff, IRC/MSN/HTTP/FTP communication (very interresting if you want to learn about sockets and TCP protocols), a scripting engine+compiler (with bytecode), a half working Wiki. A very interresting tool that checked modify/access dates of a large tree of files to see what has been accessed after running a program (What does that program use?). My hobby programming stuff usualy always start with something I need. Sure for 90% of the stuff I did there are libraries. And I use those now. But making them yourself sometimes provides loads of learning material. Now I understand what those libraries do, and why.


Log in to reply