• The programming talent myth
    76 replies, posted
Check Axel Schreiner's "Object Orientated Programming in ANSI-C". It's out there on the internet. Google it. I had a subject in university that covered pretty much most of what that book is all about. So yeah I did OOP in C as a first year subject. [QUOTE=NotMeh;47657592]C doesn't have OOP though, which is a big chunk of programming as well I started with C++ and I'm doing great[/QUOTE] I have no idea where you guys come out with the idea that C doesn't have OOP. I understand it hasn't been designed for OOP, but you can design those principles very effectively in C, although not as conveniently as in C++. C does[B] everything. [/B] [QUOTE=FlakAttack;47658036]Can't say I agree with starting with C either. Any language used for beginners should have all the main features a programmer would reasonably be expected to know. It should also have lots of documentation and examples. And it should be useful as a language unto itself. They're common, they have plenty of support, they are adaptable, and they teach you just about everything you need to know.[/QUOTE] Congratulations. You just described C. [QUOTE=FlakAttack;47659281]Object-oriented programming is a basic principle any modern programmer will be expected to understand.[/QUOTE] C can also be Object Oriented, except it's on a lower level than the languages you're describing. Not saying they're not a good start, but the lower a programming language is, the better your understanding on how programming works inside a computer is. By this, I'm not saying you should start with Assembly or anything. (Although it helps you understand a lot of programming and what code does). What I mean is: First, If you want to get into programming and have a full comprehension on what it's all about, I don't believe you should stick with an easy does it language like (Lua, Java, C++, etc..). I recommend C [U]before[/U] advancing to those languages because: a) it covers all the abc of how programming works b) it's low level, hence bigger understanding in future high level languages you might come across. c) The bigger your understanding on low level object orientation, the bigger your capability of optimizing your code in other languages and make it so that your code is as optimized as you can. Second, a comprehensive understanding on programming, requires versatility and knowledge from a good amount of many languages, and C provides a deeper understanding on the popular languages from nowadays. Therefore it's a great language to initiate your journey into programming. Because it's gonna be hard on the first times you pick it but it'll certainly pay off in the long run. And there's a LOT of tutorials out there on the web. There are also a lot of cheap books in libraries on C, so there is a lot of support. (There hasn't been a problem in C I have come across that hasn't been solved with a quick search on Google). Of course, Object Oriented Programming is a HUGE chunk of programming. That's absolutely true. And there are other languages out there that are more oriented towards that. But everything in it's due time. First, if your knowledge of programming is ZERO - get busy with C. Understand functions, vectors and the most important thing for starters - pointers. Once you get a good grasp on those basics - yeah get working with easier languages - Java, C++, C#, etc - knowing that the knowledge you gathered in C is going to prove essential for mastering those.
[QUOTE=Behemoth_PT;47684991] I have no idea where you guys come out with the idea that C doesn't have OOP. I understand it hasn't been designed for OOP, but you can design those principles very effectively in C, although not as conveniently as in C++. C does[B] everything. [/B] [/quote] And so does Assembly. But you won't see me doing Web Dev with it (at least not for a job). There are a variety of languages, and some are just flat out more efficient in certain things than others. Masturbating over a single language as a cover-all is IMO, foolish. [QUOTE=Behemoth_PT;47684991] Congratulations. You just described C. [/quote] I would not recommend C to anyone ever as a starter language. It's old, sort of obfuscating, and doesn't even have classes (which is sorta important if you are teaching anyone the basics of programing, as OOP in most languages is based upon Classes). [QUOTE=Behemoth_PT;47684991] C can also be Object Oriented, except it's on a lower level than the languages you're describing. [/quote] Which is a work around way of making things work, rather than working with something that is already inherently capable of OOP and more efficient with it. [QUOTE=Behemoth_PT;47684991] Not saying they're not a good start, but the lower a programming language is, the better your understanding on how programming works inside a computer is. [/quote] You do not need comprehension of programing functionality, only concepts, for sufficient understanding of programing. That's like trying to teach people programing efficiency right off the start - waste of immediate time, since it's something that is learned through experience or need. [QUOTE=Behemoth_PT;47684991] What I mean is: First, If you want to get into programming and have a full comprehension on what it's all about, I don't believe you should stick with an easy does it language like (Lua, Java, C++, etc..). I recommend C [U]before[/U] advancing to those languages because: a) it covers all the abc of how programming works b) it's low level, hence bigger understanding in future high level languages you might come across. c) The bigger your understanding on low level object orientation, the bigger your capability of optimizing your code in other languages and make it so that your code is as optimized as you can. [/quote] a) It also does it in a way very few other languages do. Hell, it's a problem with C++ as well. No language developed in modern days will use headers. b) Except not at fucking all? That's like saying binary will allow for easier understanding of PHP functions. In fact, other languages may operate in entirely different ways. c) While optimization is nice, unless you work with resource-intensive projects, it's not always highest priority on the list (or at least, having shit work is of higher importance). And again, it's a starter language, so efficiency is going to be non-existent until further experience accumulation in the language's user. [QUOTE=Behemoth_PT;47684991] Second, a comprehensive understanding on programming, requires versatility and knowledge from a good amount of many languages, and C provides a deeper understanding on the popular languages from nowadays. Therefore it's a great language to initiate your journey into programming. Because it's gonna be hard on the first times you pick it but it'll certainly pay off in the long run. [/quote] It's also old, and generally not used in mainstream programing at all. Be a cool kids and learn Pascal or Basic instead, if you wish to dig into the past. [QUOTE=Behemoth_PT;47684991] And there's a LOT of tutorials out there on the web. There are also a lot of cheap books in libraries on C, so there is a lot of support. (There hasn't been a problem in C I have come across that hasn't been solved with a quick search on Google). [/quote] This is luckily true to most programing languages. Also, all hail Stack Overflow! [QUOTE=Behemoth_PT;47684991] Of course, Object Oriented Programming is a HUGE chunk of programming. That's absolutely true. And there are other languages out there that are more oriented towards that. But everything in it's due time. [/quote] Eh, considering it's easier (and arguably, more important) to learn, implement, and use in the modern workplace, I'd say the time is NOW, right off the start. [QUOTE=Behemoth_PT;47684991] First, if your knowledge of programming is ZERO - get busy with C. Understand functions, vectors and the most important thing for starters - pointers. Once you get a good grasp on those basics - yeah get working with easier languages - Java, C++, C#, etc - knowing that the knowledge you gathered in C is going to prove essential for mastering those.[/QUOTE] I'd say that those are rather poor choices for someone who is just starting out. As most of those things (aside from functions, which are universal) are not found in day to day programing use. Vectors? All the cool kids use linked lists and trees, man! Pointers and memory manipulation while nice, is not in any way important to any one who started learning programing. It's not 1980's, direct control of memory allocation is not important, and most pointer knowledge that you'll need to know, is reference to created objects. In truth, the way your post is worded, it reeks of tryharding and trying to scare people away from the programing, because they cannot immediately comprehend advanced and obscure concepts right off the bat. But you did not insult my waifu (PHP) (but hate on Java will cost you points), so I will spare you, yet.
[QUOTE=NotMeh;47639866]We've had programming exams on [I]paper[/I] in my university[/QUOTE] Had that noise in my first year. My hand could write curly braces in my sleep with 100% accuracy for a few weeks after. It wouldn't have been so bad if we could use pseudo-code, but no, we had to write actual Java code.
I really like in classes where we have to make a program to certain specs there's always that dickhead that goes way above and beyond to try and show everyone else up while I just do it to spec and still ace the assignment. I don't get wasting your time on things that aren't required or needed.
[QUOTE=Behemoth_PT;47684991]C zealotry[/QUOTE] You're the worst kind of person. No, you do not need to learn C before you learn anything else. C is a dying language today for 90% of the worlds programmers. The rest? Well you're the embedded system/ OS level guys who do need to know a lot of that shit. C may be a simple language in terms of what it provides, but for someone learning to program it introduces complexity. Teaching people who can actually program in most high level languages how a reference or a pointer works can be a pain in the ass, teaching that to someone who has only just started programming is even harder. Knowing lower level languages in no way translates to enhanced knowledge of a higher level one. Sure you might now understand how that language handles parameters at the lowest level (is it pass by reference or pass by value?) but that largely doesn't matter to the armies of web systems engineers, application developers and so forth. As long they understand the language they learned and work in that's good enough. Most modern languages are also pretty good at optimising themselves at compilation or runtime in the case of VM based languages. C just has a few deprecated ideas that nobody really uses today because they just seem absurd to expose to the user. Header files? Why bother with that shit. Unmanaged memory? Fuck that, I just need things to work right now, I don't have time to track all my pointers. Keep it simple, stupid. Try and abstract complexity away or you'll just scare prospective new guys away.
I don't disagree with you, but I don't think C is all that scary to begin with. And yes I know that a person doesn't have a lifetime to understand the full spectrum of programming. however I'm not trying to scare people away from programming. What I'm trying to say is that you don't need to be a genius to know programming, but it takes hard work and full coverage to some degree. When I started my EE course my first programming language was C, in a subject about microprocessor programming, and I struggled a lot with it, then In the second year I had assembly as a 3rd subject on computer architecture where we mounted an 8086 architecture. And although it being a horrible language I hope I never touch again, it made my life in C less miserable, as I'm sure C will make my life less miserable when I learn other languages. However, C, Assembly, SQL, Prolog, Golog, Matlab, Java (in telecommunications) are all languages that are more interesting to someone like me who needs low level efficiency directed towards machines and hardware rather than object oriented abstract data types for software development. That's why people in computer science in my university start off with Java and C++, among others and we start with the oldies, like C. However I still think a deep understanding in programming doesn't hurt and it's really nothing to be scared about. As I'm sure that if I started doing java apps for smartphones as a hobby, things would certainly be easier for me than for someone who's starting from scratch. I think it all depends on what your area of expertise is, and I see most people here use programming for web development, apps, game engines, software, etc... I don't (at least not yet), and quite frankly I didn't even watch the video. So I'm assuming it's also about that. So that's why I' recommended good ol'Dusty moldy C. (because I foolishly didn't take other areas in consideration and was focusing more on programming itself). Businesses need people that can easily learn languages for whatever orientation they need. And those you mentioned are the ones in high demand. You're in Computer Science related areas, if I'm guessing right. I'm in Electrical Engineering, and low level languages are important in my area because they take less time to compile and obviously work faster when used in machines that need to think fast. Like for example having and Arduino measuring something really fast and efficiently, etc etc. To conclude, gufu, you are right. and if you're into software/web development, then, unless you're feeling nostalgic don't start with C, start with something else, like C++, Java, (I don't know) which everyone has already recommended. If you're playing with arduinos then it wouldn't hurt to learn C/C++ or python if you're feeling adventurous.
[QUOTE=ScottyWired;47624342]Basically saying that too many people have a mindset of "shit or godly programmer" and nobody recognises the group in the middle. The "perfectly adequate" programmers which make up the large majority of programmers aren't trying to get jobs because they're worried they don't fall into that top 10% of super programmers.[/QUOTE] So... basically any creative job ever then? This same idea can be applied to animation, VFX, sound engineering, modelling, concept art, engineering and a lot more.
[QUOTE=Behemoth_PT;47685615]I don't disagree with you, but I don't think C is all that scary to begin with. And yes I know that a person doesn't have a lifetime to understand the full spectrum of programming. however I'm not trying to scare people away from programming. What I'm trying to say is that you don't need to be a genius to know programming, but it takes hard work and full coverage. When I started my EE course my first programming language was C, in a subject about microprocessor programming, and I struggled a lot with it, then In the second year I had assembly as a 3rd subject on computer architecture where we mounted an 8086 architecture. And although it being a horrible language I hope I never touch again, it made my life in C less miserable, as I'm sure C will make my life less miserable when I learn other languages. However, C, Assembly, SQL, Prolog, Golog, Matlab, Java (in telecommunications) are all languages that are more interesting to someone like me who needs low level efficiency directed towards machines and hardware rather than object oriented abstract data types for software development. That's why people in computer science in my university start off with Java and C++, among others and we start with the oldies, like C. However I still think a deep understanding in programming doesn't hurt and it's really nothing to be scared about. As I'm sure that if I started doing java apps for smartphones as a hobby, things would certainly be easier for me than with someone who's starting from scratch. I think it all depends on what your area of expertise is, and I see most people here use programming for web development, apps, game engines, software, etc... I don't (at least not yet), and quite frankly I didn't even watch the video. So I'm assuming it's also about that. So that's why I'm recommending good ol'Dusty moldy C. Businesses need people that can easily learn languages for whatever orientation they need. And those you mentioned are the ones in high demand. You're in Computer Science related areas, if I'm guessing right. I'm in Electrical Engineering, and low level languages are important in my area because they take less time to compile and obviously work faster when used in machines that need to think fast. Like for example having and Arduino measuring something really fast and efficiently, etc etc. To conclude, gufu, you are right. and if you're into software/web development, then, unless you're feeling nostalgic don't start with C, start with something else, like C++, Java, (I don't know) which everyone has already recommended. If you're playing with arduinos then it wouldn't hurt to learn C/C++ or python if you're feeling adventurous.[/QUOTE] C definitely has it's places in the world. I've spent the last year dicking around with it because it's the go-to for high-performance computing applications (mmmm MPI, mmmmmmm OpenMP). And it's quite easy to retroactively learn it once you're confident in basically any language. But I would never suggest starting with it unless you really want to get into the nitty gritty of programming. Knowing how memory management actually works, etc. is certainly a useful skill, and some I would recommend programmers actually learn because a lot of us high-level fucks are lazy assholes and waste opportunities all the time. But this is the kind of thing you only really need to start prodding around when you're confident you can actually write anything. But even theoretical computing is moving away from it a bit because it's just so slow to actually do anything in. You have to be careful, sacrifice several undergraduates to the C gods and hope you brushed your teeth right to left in the morning otherwise it's time to start debugging everything! My project in the end stopped focusing on C and instead on Swift/T (nobody uses this in any real manner yet, but it's awesome) because C was really starting to hold us back in how much work we could do when experimenting. My supervisor is writing some pretty nifty simulation software in C# because it's quicker, easier and still gives C a run for its money speed wise. For anyone outside of the embedded or low level systems fields, C really isn't a great place to start. But it is a great place to research when you want to understand what makes your things tick.
To be honest my first C assignment was hell. My professor used to make us either install a Linux build (without debuggers) - coding in .txt and compiling and running with gcc and ./, or for the people being too lazy to install Linux, Cygwin and Crymson. My professor was kind of a jerk. Imagine someone like Dr. House, but for programming. It was chaos. He made us program a chess game that worked on the console with ASCII characters as pieces and other weird characters and lines as the actual board. Thank god they gave us the code for the board display, but programming piece by piece in C was total hell for us newbies. Pieces moving erratically whilst having the compiler showing absolutely no errors, and spending hours trying to figure out which parameter or condition we typed in wrong... The closest we had of a debugger was typing in printf's as flags to check if variables were carrying the right values. Then I discovered IDE's and installed codeblocks - and later on Eclipse Luna, and I started using it in secret and most problems disappeared due to the step by step debugging. And then, to sum it all up. During the assignment discussion. Our professor would erase some blocks of code from our assignments, to make sure we actually did them and not someone else, and he would make us re-program them, under the penalty of failing the subject and be his slaves for all eternity. Right now I'm still working in C, on Algorithms and Data Structures (a subject I left behind) and it's much easier now, which is a very low level grasp on object orientation with C. The boring part is, we have to make our own source and header files. The good thing is, they already provide us with the Abstract Data Types of the many structures we need so it's pretty easy. Other than that, I had to make an assignment in SQL (I don't recommend it to anyone, it's awful) and I'm currently working on Prolog. Which is actually nice and really easy to learn if you're into AI's and Theorems or data structures, like family trees.
[QUOTE=Behemoth_PT;47685838] Other than that, I had to make an assignment in SQL (I don't recommend it to anyone, it's awful)[/QUOTE] Someone who likes C and (most importantly) PROLOG, but dislikes SQL? You are a mystery, man.
SQL is alright. For what it does it works quite nicely, if a bit awkward in some implementations. But then again I quite like systems development which usually involves talking to a SQL powered relational database at some point so I've used it a bit.
[QUOTE=Behemoth_PT;47685615]I don't disagree with you, but I don't think C is all that scary to begin with. And yes I know that a person doesn't have a lifetime to understand the full spectrum of programming. however I'm not trying to scare people away from programming. What I'm trying to say is that you don't need to be a genius to know programming, but it takes hard work and full coverage to some degree. When I started my EE course my first programming language was C, in a subject about microprocessor programming, and I struggled a lot with it, then In the second year I had assembly as a 3rd subject on computer architecture where we mounted an 8086 architecture. And although it being a horrible language I hope I never touch again, it made my life in C less miserable, as I'm sure C will make my life less miserable when I learn other languages. However, C, Assembly, SQL, Prolog, Golog, Matlab, Java (in telecommunications) are all languages that are more interesting to someone like me who needs low level efficiency directed towards machines and hardware rather than object oriented abstract data types for software development. That's why people in computer science in my university start off with Java and C++, among others and we start with the oldies, like C. However I still think a deep understanding in programming doesn't hurt and it's really nothing to be scared about. As I'm sure that if I started doing java apps for smartphones as a hobby, things would certainly be easier for me than for someone who's starting from scratch. I think it all depends on what your area of expertise is, and I see most people here use programming for web development, apps, game engines, software, etc... I don't (at least not yet), and quite frankly I didn't even watch the video. So I'm assuming it's also about that. So that's why I' recommended good ol'Dusty moldy C. (because I foolishly didn't take other areas in consideration and was focusing more on programming itself). Businesses need people that can easily learn languages for whatever orientation they need. And those you mentioned are the ones in high demand. You're in Computer Science related areas, if I'm guessing right. I'm in Electrical Engineering, and low level languages are important in my area because they take less time to compile and obviously work faster when used in machines that need to think fast. Like for example having and Arduino measuring something really fast and efficiently, etc etc. To conclude, gufu, you are right. and if you're into software/web development, then, unless you're feeling nostalgic don't start with C, start with something else, like C++, Java, (I don't know) which everyone has already recommended. If you're playing with arduinos then it wouldn't hurt to learn C/C++ or python if you're feeling adventurous.[/QUOTE] I think it's important to understand that not everyone thinks the same way. You might find high-level development easier if you understand how those languages and concepts work internally (i.e. at lower levels), but that doesn't apply to everyone. Let alone whether it's easier to start on a low level and work your way up or start on a high level and work your way down. And yet others will want to skip computer science and low-level development entirely because all they care about is building the next killer mobile app, as you eventually admitted yourself, even though they may not always fully understand everything, or see the most efficient solution to every problem. Still others have zero interest in software engineering and only care about microelectronics and system programming, even if they miss out on the knowledge in project management, software design etc. you'll find in high-level environments. Meanwhile, lots of people on this forum would've never gotten interested in programming if it hadn't been for Garry's Mod, and are now dispersing into every programming field imaginable. So, yeah, starting out by learning how computers work and programming in C [I]can be[/I] the right strategy even if something like web development is where you actually want to end up. It really just depends on the person.
[QUOTE=itisjuly;47628742]Not entirely. You could be the most technically skilled painter ever but if you lack the creativity your art won't be on the same level even compared to someone who's not as skilled with a brush but has a really creative mind. Hell, a lot of artforms require creativity and out of the box thinking more than actual skills. To me talent is the ability to put your skillset to use to create amazing things. Talent is not the ability to just pick up a tool and be really good at using it. For example two equally skilled(which can't be measured really) people are competing, one has talent but other does not, the one with talent will produce a much more impressive result compared to the one without it even if their skills are evenly matched. [editline]30th April 2015[/editline] Yeah, schools should shift away from memorizing and instead teach how to find relevant information efficiently. Most of the shit you memorize for tests you forget anyway. Information gathering is a much more valuable skill than memorizing said information.[/QUOTE] I think you misunderstand how 'creativity' works It's a mindset that you can learn to adopt, not some magic midicholrian voodoo that you've either got or will never have
[QUOTE=Maloof?;47687070] It's a mindset that you can learn to adopt, not some magic midicholrian voodoo that you've either got or will never have[/QUOTE] You might be able to learn how to be creative, but that doesn't mean some people aren't inherently more creative though. Adopting a new mindset can be really hard as well since the way to go about it will be different for every person attempting to adopt it.
[QUOTE=gufu;47685937]Someone who likes C and (most importantly) PROLOG, but dislikes SQL? You are a mystery, man.[/QUOTE] Well, to be honest it's not a hard language to understand. It's just that they gave us a shitty assignment to do in Oracle SQL developer about some stupid weather sensors in the country. And to be honest I didn't participate that much in the assignment to learn to like and deeply understand SQL. I might give it another go in the future. Don't worry.
I remember favouriting this a while back [img]http://a.pomf.se/nclbva.PNG[/img]
Sorry, you need to Log In to post a reply to this thread.