Closed. This question is opinion-based. It is not currently accepting answers.
Want to improve this question? Update the question so it can be answered with facts and citations by editing this post.
Closed 9 years ago.
Improve this question
What is the best route to go for learning OOP if one has done some programming in C.
My intention was first to take the natural leap and "increment with one" and go for Stroustrup. But since I got my hands on the little old Bertrand Meyer's OOSC2 and I qoute from the appendix page 1135 "..according to Donald Knuth, it would make Edsger Dijkstra 'physically ill to think of programming in C++"
And Meyer himself "..that C++ is not the ideal OOP language..."
And what about this A critiqe on C++ on this question: A critique of C++
Should I skip C++ and go for C# and or Java directly if my intention is a great and deep understanding of a modern OOP-language, or do I miss good points on this subject in C++?
Well I know this is a discussion-thing but I mark it wiki and you're answers could mean a lot for me in choices to come.
C++ is not only an OOP language. It is multi-paradigm (procedural, OOP, functional, generic...)
So if you want to learn just OOP, maybe it is not the best choice.
I would suggest C#. The syntax is similar, but it's different enough to keep you from falling back into old C habits. With C++ I always found myself writing C, with the occasional object thrown in.
Yes. If your intention is "a great and deep understanding of a modern OOP language", go for a modern OOP language. C# definitely qualifies on the "modern" count, and prides itself on being OOP. Something like Smalltalk would be the OOP language, but it is less modern. You could always learn both.
As for C++, it's hardly an OOP language. There are many good and valid reasons to learn C++, but not if you're only interested in OOP.
Today, C++ is characterized not by OOP, but by features such as generic programming and to some extent inspired by functional languages.
There are many useful lessons to be learned from C++. A few of them are:
some very nice techniques for managing resource lifetime, which "modern" languages like C# and Java could learn a lot from
The generic programming paradigm, and the extent to which it can make OOP completely pointless. The whole idea of thinking about types in terms of traits and concepts, rather than which interface they implement, and the preference for truly reusable non-member functions is interesting to someone who still thinks that OOP is the holy grail of programming.
If you're asking whether you should learn C++, I'd say yes (along with 5-8 other languages. C++ is not "special" in any way. It's one of many languages that programmers can profit from learning).
If you're asking whether C++ is going to be a good introduction to OOP, I'd say NO. Which is exactly why it is worth learning.
Objective-C
The fundamental idea of C++ is to reuse the C syntaxic idioms by applying OOP semantics on them. This leads to objects "on the stack", the use of ++ for iterators, and so on. The C syntax was developed mostly for ease of implementation of the C compiler, not for OOP, and the result is that C++ is quite complex a language and ill-suited to learning.
Java and C# are much simpler to learn, while still sticking to the class-based approach of OOP that C++ uses. Java is a bit simpler than C#, because C# designers knew Java and decided to have a similar syntax with a bunch of extra syntaxic goodies. Those goodies make C# syntax a bit more complex, hence less appropriate for learning.
There is another structural approach of OOP, which is the one of Smalltalk. A "modern" and widely used language which uses that approach is Javascript. You may want to try that. Javascript is quite cool in that you only need a Web browser to try it, and through the browser it has access to a rich graphical environment. In the same family, you may want to try Lua, which is said to be simple, and quite popular.
I would say start with Java. The Java tutorial is well written with lot of examples which you can (should) run and experiment with. Coming to books I would say check the Head First Java and Head First Object Oriented Analysis and Design from the Head First series. Once you get your feet wet with Java and get fair idea about Object Oriented Concepts invariably you would run into design patterns and for which the book Head First Design Patterns provides a good start. All these I think would provide good basic starting point for your exploration of object oriented programming.
Any language will do if you learn it from a good book. I learned both C++ and Java starting from Bruce Eckel's books.
After you know some basics of OOP, I would suggest reading Object-Oriented Programming with ANSI-C. It will give you some deep insights on how OOP languages work, because it implements an OOP language from C.
For a Java centric introduction, I highly recommend Head First Object Oriented Analysis and Design from the excellent "Head First" series by O'Reilly.
I found the book to be very approachable and easy to understand, no matter what direction you're coming from. While the book uses Java, the OOP concepts discussed in the book are applicable to any OOP language.
I would say Java. A good book that helped me is this one.
Even though I think a lot of those criticisms of C++ are fair, at the end of the day Java and C# did not diverge that significantly from C++ in OOP paradigms, which was clearly a huge influence on both of them. To say you will learn OOP wrong by learning C++ instead of Java is sort of stupid since their OOP models are extremely similar.
And to talk about a bunch of techniques that programmers in that language happen to use (template programming), and acting like it's something you have to use is silly. Saying that you could "fall back into C" is another stupid reason - you can avoid OOP in ANY language (for example, in Java, you can write a program within one class).
Want to know one of the best reasons to learn C++ over Java or C#? There are many more interesting projects that are already in C++ then in the other two. This is changing with time, but look around on SourceForge, and it seems C and C++ are still the predominant languages for the type of projects that I find interesting (games, web browsers, etc).
Learn C++ only if you want to work on it, on projects that use it, in jobs maintaining C++ code (which will continue to exist for many years). C++ is far from a dead language.
But it probably ought to be considered a niche language these days for anyone starting a new project and doing something like a web application, rich client GUI, etc. Most typical applications, C++ would be a self-defeating choice, like deliberately making it difficult for yourself.
But if you like a real challenge, go for it.
Much longer answers from me on similar subjects:
What’s wrong with C++ compared to other languages?
What are the differences between C, C# and C++ in terms of real-world application
I learned OOP in both Ada95 and C++ and coming from plain C and Ada83. I didn't think it was that hard to learn the concepts of OOP with C++ because I was already familiar with the syntactical elements and pointers.
What is your purpose though? To become a good C++ developer, or to just understand OOP?
If it is the latter, then pick a language that you understand and go from there. Java, C#, or even C++ would all be good choices. If it is the former, you will have to buckle down and learn a lot about C++ and how it works under the hood. It takes time and practice to become a good C++ developer.
As others have already mentioned here C++ supports more than one programming paradigm. Probably the most noticable is mixing classes and objects together with "global" functions which is easily possible within the same file and context.
But in my opinion there is enough OOP paradigm in C++ to use the language to learn OOP. It is much more important to have a good guide for OOP itself. Such a guide will teach you to use the object oriented elements in C++ and how and for what purpose and it won't tell you anything about C-style functions you could also create in C++.
For your decision what language to choose I'd recommend to look a bit further into the future what you actually want to do in programming. If it is web or rich UI desktop development you will have more use of Java or C#, is it rather something closer to system development, C++ might be the better choice. OOP you can learn with C++ and Java, C# or other languages as well.
For me it is a bit like the question: "I want to learn how to translate texts from my native language into other languages. What second language shall I learn? Icelandic or Swahili?" For this decision it might be more important whether you hate cold or hot climates. (At least I would consider this as more important than the arguments some linguists will probably have to prefer one of the languages.)
I think it is true that for instance C# will FORCE you much more than C++ to write OOP code but it does it only in terms of the language SYNTAX. But OOP is more about semantics and that is rather language independent. There is no semantic difference between sin(0.5) (a function without class context in C/C++) and Math.Sin(0.5) (a class method in C#). If you end up in C# to create lots of static classes something went wrong with learning OOP although you follow (necessarily) an object oriented syntax.
So my two cents: Try to find additional programming goals you have beyond learning OOP and add these goals to your decision for the language you want to dive in. Only for learning OOP C++ as an example language is fine and some other languages as well.
I need to add: I've said this from a "pragmatic" viewpoint presuming that you actually want to work and to create software with what you've learned. If you have a kind of pure scientific, structural interest my arguments might be all wrong. Then maybe the purest of all OO languages (Smalltalk?, probably not C++) is the right choice, no matter who actually "speaks" this language and for what purpose.
After a year of reading books and trying examples by myself, I broke down and took a class "Object Oriented Programming in Java" from a local community college. I was able to learn in a classroom setting where I failed on my own. (This is unusual for me -- I have managed to learn a lot of technologies on my own). I think the classroom setting with a real teacher who could explain things, other students to discuss things with, and small but useful assignments and class projects to exercise the newly learned material were a good combination.
Many of the other students were IT professionals. I made some good contacts. Alas, this was 18 years ago, and I lost touch with almost all of them.
The downside -- this did cost money, but it was affordable, and when I got laid off a year later, I was able to get a job as a Java programmer.
I'm with the other commenters, in C++ it's far too easy to slip back into C. Structurally, Java and C# are similar to C, and the core languages are nearly identical to each other. Once you learn to think OO, C++ will come much easier.
forget about the tools or the past (C++, oop,C##,learning, thinking , trying). lets encourage creativity and momentum. Fresh approaches lets crash into the future.
What I love about technology is that it is only starting, Like art or Maths
I believe that lazy thick dyslexics (who cant be bothered to pretend to be smart) are the next step in evolution ;), the step after that will be the artificial brain. At that point we will all live forever and just enjoy ourselves :)
like a designer who looks at a design in real life to gain inspiration (A kettle, a door, A Lift or a building) I look at abstractions in real life to gain inspiration (or where there missing), A banks Risk systems (The Multi dimensional topology of flows and rules) or a spread sheet (cells, rows and columns) The simplicity increases visualness and abstractnesses (What do cells rows and columns have to do finance) is excessively agile, How quickly could you change a set of rules in a spreadsheet vs software so The visualness works with the human Brain while the simple abstractivity also help the brain understand the domain.
Working with a complex and sophisticated system becomes the job for a lazy Thicko (me)
I look to include these same benefits in My APIs
Best Of Luck and God Bless
Related
As it currently stands, this question is not a good fit for our Q&A format. We expect answers to be supported by facts, references, or expertise, but this question will likely solicit debate, arguments, polling, or extended discussion. If you feel that this question can be improved and possibly reopened, visit the help center for guidance.
Closed 9 years ago.
I have been working with C# for many years, since beta. I am having a bit of a time of it, moving from OOP to functional-oriented programming (FOP). I started out with the concepts of procedural programming and functional composition in the late 1980s and have been doing OO since around 1995 when UML was in its infancy where I was programming in Delphi with the multi-paradigm approach of procedural and OO. Are there any good books suggestions, to helping the transition over to functional programming from a deep rooted OO programmer?
I tried a Haskell book, but it seemed to require some background in the subject and was very unapproachable.
I have a couple of O'Reilly, Apress books on F#, but it all seems a bit woolly and half way house, of just getting the job done. It also mixed objects up with functions to suit the needs.
F# seems to forgive me in my OOP thinking a lot more than Haskell, but I think to get the true benefits I need to get into the mindset of FOP to get the best out of the code. I have read around functional programming for about two years in between my day-to-day C# stuff. But I feel I am not getting into the thinking.
I am pretty sure that there are many people out there like myself. Any answers would be, I think, a great help to a lot of C# guys wishing to move over to F#. Especially with many big hitters in the market place asking for F#. I am a contractor who needs to get up to speed as soon as possible.
This is definitely subjective, but I think that many people are asking similar questions. I certainly did when I started learning F# (as someone with C# experience). Here are some assorted ideas:
Pick the right learning problems - The best way to learn functional programming is to start working on some non-trivial projects. If you pick a project that is easy to solve in the OO way, then you'll probably lean towards OO solution. However, if you choose some project that naturally fits FP solutions, then you'll learn something. In my case, I worked on translator from F# quotations to JavaScript, which involves a lot of recursive processing and discriminated unions.
Don't try to be perfect - If you try to write something in the functional way, it may not be perfect at the first attempt. Don't worry about that (and don't say to yourself that you could do better in OO way). You can do better in the FP way as well - it just takes some time to find out how to do that.
Try to be purist - If you start learning Haskell then you'll have to write pure functional code. F# doesn't enforce that, but I don't think that makes F# less suitable for learning functional programming. If you know C# and .NET, you can reuse a lot of your experience. Just try to be more strict to yourself and avoid using non-functional constructs like mutable state and inheritance - they are sometimes useful, but you can use them after you learn to think in the FP way.
And a little shameless plug - answering a question like this was one of the key motivations for my Real World Functional Programming book, so maybe that could help...
Are there any good books suggestions, to helping the transition over to functional Programming from a deep rooted OO programmer
The Structure and Interpretation of Computer Programs (SICP):
Book: http://mitpress.mit.edu/sicp/full-text/book/book.html
Video lectures: http://groups.csail.mit.edu/mac/classes/6.001/abelson-sussman-lectures/
His course seems to focus mostly on functional composition. It is in LISP, but it is less about the language, and more about the abstract concepts.
I don't think he says much (or anything) about pure FP, but I haven't really read all of it, either :) The concepts and way of thinking should still be highly applicable, though.
I believe that to really understand functional programming you must first reorganize all your knowledge about the ways to implement different things (e.g. you have to understand that objects may be represented as hash maps or even associative lists, not just as records). Also you will need to start thinking in terms of immutable data and pure functions (procedures of no side effect). Then you'll have to compare functional and procedural ways to implement and treat objects.
All of this you can find in SICP - classical book for learning not only FP, but programming in general. To understand functional way you won't have to read all book, but at least first 3 chapters.
After you understand main FP concepts and are able to implement anything in it's style, read any book on statically typed languages. E.g. Apress books on F# will be much easier to read.
Learn You a Haskell is a decent read, though it's probably a bit too basic given you probably already know the syntax of Haskell from one of those books that you picked up...
Moving up a notch, there's Programming in Haskell, which if you scroll down on that page, has a bunch of links to video lectures based on the book given by MS Research's Erik Meijer.
The Equational Reasoning stuff is particularly interesting, if only academically.
In terms of application, that Real-World Functional Programming book given in the other answer looks really nice -- though I haven't read it, so I can't make any judgments.
This question already has answers here:
Closed 12 years ago.
Possible Duplicate:
What are the benefits of using C# vs F# or F# vs c#?
After reading some on the subject and watching this video
http://streaming.ndc2010.no/tcs/?id=29649A14-2F1B-428E-BB12-9A43A1676221 where Eric Lippert, Jon Skeet, Mads Torgersen and Neal Gafter discussing the future of C# its pretty clear that C# has some heavy baggage from earlier features added to C#. These features must be supported in later versions of the language even though they add complexity and makes adding new features more cumbersome. Probably why most languages die sooner or later.
F# is a new language and obviously don't have the same legacy to worry about, so since both are general purpose languages it seems tempting focusing more on F#. Do you think F# is going to take over C# as the language of choice within the .net world and in case how soon will this happen?
I know there is a difference between functional and imperative languages so you could argue they are too different to be compared but the fact that c# is getting more and more functional features I have to ask why not just make the jump directly to F#
Firstly, don't think of the division being "functional" vs "statically typed" - F# is still a statically typed language.
Do I think F# is going to take over from C#? Not in many areas. In some niches it will definitely make its mark... but I personally think it's more important for a different reason: it will encourage people to think more functionally.
It's absolutely worth looking closely at F# - in order to improve your C#. You won't find that every task is suited to a functional approach, but it's definitely worth learning to think in a slightly different way.
At this point, I should probably plug Real World Functional Programming - mostly written by Tomas Petricek, with a tiny bit of help from myself. It's aimed precisely at developers who want to think more functionally, with a heavy bias to existing C# developers who are interested in F#. (And today - September 4th 2010 - the ebook is only $15. Use code dotd0904cc at the checkout :)
C# is here to stay. The majority of commercial developers (and almost all commercial .NET developers) are trained in and use C derivative, imperative languages/styles.
I don't think the development world is going to undergo such a radical paradigm shift that imperative OO will vanish in favour of functional hybrids unless of course you count C#'s own move into the realm of a functional hybrid.
(by and large) You just cant hire F# developers, You can't find a job as an F# developer, you can't convince most workaday C#'ers (those who aren't language fans or hobbyist coders in their spare time) that F# is anything more than an academic toy or is simple enough to make it worth their time learning.
I SO wish that wasn't true, the more I learn F#, the more I would love it to be the language I used on a daily basis.
In reply to your question: YES! learn F# as it's a wonderful language, but it's not going to squash C# overnight (or over the next decade).
Should you take a look at F#? Yes, but because F# is an interesting language, and you will learn new things; not because you're playing defense against the chance that "C# is on its way out and F# is the wave of the future". C# is well-established, a great language with a great community and lots of existing assets (tooling, samples, templates, ...) that make it extremely unlikely to be supplanted by any other .NET language in the near future. Learn F# to play offense: to grow your own skillset, and become an overall better developer (even if you still mostly develop in C#).
(Feature creep and legacy do slow languages down some, but not much. From what I gather, C++ is still in use, despite crushing legacy. :) You said that languages die "sooner or later", but I don't recall offhand any language that reached the mainstream but then died "sooner".)
First of all, F# is a more specialized language than C#. Yes, you could write solutions to almost anything in F#, but you'll find it particularly useful at:
Implementing complex algorithms with lots of transformations
Implementing concurrent algorithms
You won't find F# that powerful at things like UI or DB access (it can be done all right, but you won't find that much a difference from using C#).
Second, I don't think that F# will take over C# overall, but there are certain niche markets (e.g. the financial industry) where F# have a real chance of getting prominent above other languages.
Lastly, the functional programming paradigm, as you yourself mentioned, has made in-roads in several other languages/platforms (Python, Ruby, C#, VB.NET, hopefully the next Java), so getting familiar with its concepts is going to be helpful, and right now, at least in the .NET platform, F# is the truest implementation of such concepts.
Short: You probably shouldn't use F# as a general purpose language* like C#, but add it to projects where appropriate.
General purpose problems do often differ too much from the functional paradigm that F# wouldn't really excel, but in some cases, F# is absolutely the right tool. It's worth a close look though anyway, since otherwise you won't be able to actually point out these cases where a functional approach (even if implemented in C#) is favorable.
Nice problems for F#:
Mathematics / Physics / Simulation / Visualization
Data extraction / processing
Reactive GUI
Asynchronous code (events, callbacks)
Parallel execution
Parsing (domain specific languages)
Language-oriented programming (customize the language using it's
own features)
Edit: Clarification after being downvoted. Of course, F# is a general purpose in the sense that you can do everything with it and target the whole .NET framework as C# can, but because it can be used, that doesn't mean it should.
As I said, many "general purpose" applications are not inherently functional, heavily based on changing state or common object-oriented patterns. While you again can use F# there, it doesn't really shine in this cases, being kinda programmed against it's nature.
Why should you use a functional language when you don't solve a functional problem? And since you don't have to, just combine F# and C# where each fits best.
As it currently stands, this question is not a good fit for our Q&A format. We expect answers to be supported by facts, references, or expertise, but this question will likely solicit debate, arguments, polling, or extended discussion. If you feel that this question can be improved and possibly reopened, visit the help center for guidance.
Closed 10 years ago.
I've never really had any experience with programming at all, my uncle told me to come to this site for help from total strangers if I wanted to start programming. I know the names of a couple of languages but I don't really know anything at all. I'm fourteen and I can type fast if that counts for anything. One of my uncles wanted me to learn c#. So my question is, is c# a good place to begin, and if not, where is a good place to begin and how do I learn it?
You may want to look at getting the latest edition of Head First C#. It's particularly suited to newcomers - and it concentrates on "fun" examples rather than business-oriented ones. I'm not personally a fan of that style of learning, but it clearly suits a lot of other people.
Make sure you buy either the latest edition (covering .NET 4) or the most recent printing of the previous edition though: earlier versions had quite a few errors, but those have been rectified over time.
C# is a fine language to begin with.
Here is a good free ebook to get you started. It not only discusses the programming language but also what it means to be a programmer and how to approach it professionally.
As Jon says in his answer - Head First C# is also a great first book (as are all their other books such as Head First HTML).
You can get the Visual Studio Express programming environment (editor with syntax highlighting and intellisense, compiler, debugger and more) for free here - just be sure to select the C# version.
C# is an okay place to begin, but you might find it more fun to write websites instead. It's easy, everyone can see the cool things you do, and you already have the tools to start doing it -- just a text editor and a web browser. HTML and Javascript are also much simpler and more straightforward than C# without being less powerful.
http://www.w3schools.com/ is a good starting point.
In my opinion, there is one critical tool when learning to program or when learning a new programming language. That tool is "a problem that you are sincerely interested in solving."
It may be a game you are interested in writing or a desktop or web-based tool that will actually help you with something in school or in your life.
If you have a real problem that you really want to solve, there will always be free tools, tutorials, and online geeks to help you learn how to solve it.
Learning programming without solving real problems is like learning to build a house with just a hammer and a nail and a short piece of wood. You can learn the basic mechanics of the hammer, but you'll never be a carpenter until you have to confront the problems you'll encounter while trying to build something useful.
After that, I think C# is a great general purpose language to learn programming. And there are some really great free tools available.
I agree with the poster who said experiment with several languages. Solving the same problem with different tools can be a real eye-opener into the different paradigms of those tools.
If one of your uncles wants you to learn C#, he probably sees you as his employee a couple of years from now. So ask him directly if that's his plan and persuade him to help you.
If your uncle has no idea about programming and just dropped this C# suggestion because he heard the term somewhere, he might be doing a very bad favor to you.
If I would be you and I would have free hands to choose what I want, I certainly wouldn't choose C#, because it ties you to a proprietary operating system (Mono is a joke, admit it).
My choice would probably be Python, because it runs on almost any platform. And you have two very valuable tutorials for beginners that approach teaching programming from very different points, so you can pick the one that suits you best: the official Python tutorial and Zed Shaw's Learn Python The Hard Way (don't be afraid of the scary title, the book is very valuable for a beginner).
edit:
After reading the comments, I would like to add a couple more points.
How many of those C# programmers code for fun? Most programmers that use Microsoft technologies, do it professionally - it's their job, they do it for money, most of them don't have guts to admit their job is boring sometimes (even if it is), because such a claim is against the corporate policy that slips into the culture around the infrastructure provided by their (cough!) free programming tools.
Just in a couple of years, the community of users who do programming more or less seriously has literally exploded. Back in the days there was sourceforge - the single monster that was totally programmer related. Today there is launchpad, bitbucket, github (which recently surpassed 1000000 repositories, most of which are small personal pet projects governed by free licenses). How many of those projects are using C#?
Today programming is about reusing or "stealing" (in the good sense) code more than ever. Where are the herds of C# projects, small general-purpose libraries? While some programmers who write proprietary software are not very helpful to newbies (because they see it as consulting, which they can do for money), and while some programmers who write free software are not very helpful as well (because they lack social skills), the code is more important. You don't learn programming only by reading books, you learn it by studying working code. And the free software ecosystem provides much more code to study.
Generally, people who get into programming have two choices:
avoid proprietary stuff, get access to a lot of free software at the risk of being called "anonymous internet elitist"
ignore the proprietary vs free holy war at the risk of feeling what proprietary software means indeed and how it can spoil a good intention, like this guy
There's a lot to programming but it can probably be broken down into a few key elements:
theory
craft
dialects
Theory just takes lots of learning. Books, classes, trial and error, research, etc.
Craft comes with experience.
And that leaves dialects...or rather the particular language(s) you want to become fluent in.
To answer that would require a long list of what kind of stuff you are aiming to do. If you don't really have any particular direction to go in, your 'uncle wanting you to learn it' is maybe as good of a reason as any.
I would say dibble a bit in a few hot languages like C#, Python, Ruby. The reason I say this is, I think liking a language is a bit like developing tastebuds. I know many people who disgusted coding only because of braces and syntatic sugar. All I wanted to save you was from getting intimidated by syntax and throwing it away
I believe C# is a really good starting point. That's pretty spiffy that you're really interested about programming at 14.
I suggest picking up a C# book and reading it. Follow the examples as you come by them.
One of my favorite C# books is by Andrew Troelsen: Pro C# with .NET 4.0 is his latest book. :)
http://apress.com/book/view/1430225491
C# is definitely a good place to start and here is one reason why:
C# is a proper language that will pretty much force you to know what you're doing as a programmer.
I began my programming career with PHP and that language is so loose you almost can't screw up. You can make cool sites and such but never know how terrible they are until you are hired to do something that requires a stronger language. At that time, certain terms and data types that are never used in PHP will broadside you.
As I look back, now that I know many programming languages, starting with PHP was a pretty bad way to begin programming, at least in my opinion. I can't believe I have a job in this field knowing where I began.
Java is also a good place to begin. Any strict compiling language, really. When you know the foundations from a strict compiling language, the loose ones like PHP are a breeze to add to your knowledge base.
Of course, you may want to consider what you're looking to program for. If you want to do web work, C# is a good base, but doubtful that you will use it much for web work unless you're working on something seriously deep. Objective C is used for iphone and ipad development, so you can't go wrong learning that.
Java is good for web and is now a mobile platform, so it is definitely a good investment. The principles of Java will help you write better web code, as well as form a good foundation if you want to branch to C later. Vice versa, I guess.
PHP is very easy to learn and will serve you quite well if you want to get into web development. You should know html, css and get familiar with at least mysql for databases if you go this route. Just FYI, php developers are a dime a dozen in the programming field, so don't count on getting rich doing this unless you want to run your own web company and do the site yourself.
In any case, MVC (model view controller) will be an important thing to read up on. When your code is well structured, it is immeasurably easier to maintain for yourself and anyone else that may have to pick up where you left off.
Have fun.
There's no best approach, but one place to start is here:
Express Editions
They're free and you get lots of choices.
to copy a post i posted here: https://stackoverflow.com/questions/3430705/3432079#3432079 there are two things to get a handle upon:
Academic Knowledge:
Know the Theory - get a great handle on the theory of programming, the theory of language design, the theory behind the architectures you are coding on
Know the Math - all programming eventually boils down to math - know predicate logic, trig, vectors, geometry, (basic) set theory, graphs, basic matrix theory, a little numerical analysis doesnt hurt either - as well as complexity theory
Know your Language - get a book, read it, make notes for reference. Apress titles work well for C# http://www.amazon.com/Pro-2010-NET-Platform-Fifth/dp/1430225491/ref=sr_1_1?ie=UTF8&s=books&qid=1281215548&sr=8-1 is good. Then read blogs and videos, learn to use the Redgate Reflector and MSDN help
Know your Tools - for C# this means Visual Studio 2010 - http://blogs.msdn.com/b/saraford/archive/2010/06/17/video-101-visual-studio-tips-in-55-minutes.aspx is a great way to learn. Also get a decent refactorer - ReSharper is my favorite but there are others.
Know your Ecosysyem - know what libraries are out there, learn how to use one or two of the best
Skills:
Know how to define a projct - no matter how good a programmer you are if you build the wrong thing you will have failed epically.
Know how to design - learn the theory on object orientated design - the Gang Of Four software patterns are classics and every coder should be aware of them.
Know how to document code - this is critical for long lasting code and for working well in a team. Write it, Document it, Test it => Resuse it
Know how to work in a team - work hard, play nice, communicate well.
Know which tool to use - get a feel for as many types of languages, actual languages, technologyies, libraries and so on as you can so that you know which to use in which situations
Know how to learn - from those around you, from the web, from documentation and most importantly from your own mistakes.
I'm sure others can add to these lists ;)
I personally got a great headstart on programming when I started on C++ about half a year ago. I'm about thirteen myself as well. C# is a lot like C++ (there are differences, though), so speaking from experience, I'd say yeah, that's a good language to start out with.
As for references, just grab some books at your local bookstore and start working your way through them. That's what I did. If you want to start with C++, I know for sure that there's an excellent reference called 'C++ for Dummies'. That's where I started.
Whichever language you decide to pick (nothing wrong with C#). Pickup a good book or resource, a few are mentioned here. Once you've done that, make sure to work the examples by hand and then at the computer to concrete them into your melon.
It may be totally obvious, but the more examples you can work, modify and make your own and see how they work, the quicker you'll pick up the language. IMHO this is how you really start to learn and have fun because you can start seeing things happen and begin to solve problems and gain context to issues you wouldn't have just reading...
It is an asset You have made a commitment to prgramming. It is usually advantageous to start from a keen understaning of Your working environment. Ask basic questions like what tools are already available to do Your daily assignments? Have as much fun as You can with them; and when they behave unusual, ask the why? Try finding solution to them on the net. Later on, perhaps You may want to enjoy basic html for sometime; and move all the way around c-sharp or anyother programming language; because at the end You- Yourself will figure out the link between a programmer and programming languages.
Hope it helps
I wouldn't pick C# purely as it isn't completely free and the full visual studio is very expensive.
Have a look at python, it forces you program properly in many ways whilst omitting some of the more annoying aspects of programming ({'s and ;'s).
If you do choose to learn python there is a free site with tutorials on how to make simple text based games. I used it to familiarize myself with the language before starting my current project.
link:
http://pythonbook.coffeeghost.net/book1/index.html
The most used languages are C and Java, according to Tiobe, so I'd almost say you should start there but esr has some good reasons for recommending Python as a first language.
C# is an excellent place to start. One thing I would suggest is think of something cool, but not too complex, that you would like to build the using some of the reference books other people have suggested in this thread go build it. Calculators are fun starting programs to build (Disclaimer: I am a math geek).
Having an ability to type fast using ten fingers is useful as you can do more and more exercises without causing your muscle tired quickly.
The first time I used computer, I just typed using my right index finger only and got tired fast ---typing become a nightmare !
If you have much time, you can start learning the following topics in order:
Computer architecture from hardware and software perspective.
C# (Deitel's C# book may be a good choice since it has much more details).
Any widely used language is a good place to start. Once you have done some useful projects in one language, it will be easier to pick up others because the logic is similar.
I suggest choosing based on what you want to do with it now. For example, let's say you are interested in making a few simple games while you learn (think frogger or maybe 1943 and keep the scope small). You can make 2D games pretty rapidly using an interpreted language like Python or Ruby (both have free game libraries available). With perhaps a little more work you can make them in Java or C, and have room to grow into heftier game features. Or you could make them in Objective-C and Cocoa, which would limit you to developing on a Mac, but open the possibility of distributing your games on the iPhone.
If you want to do business or finance applications, you can find a lot of support based on languages like C#, Visual Basic, Java, C, and the .NET framework (not a language, but applicable to enterprise software generally). It would also be a good idea to practice with SQL for interacting with databases (where business data like sales, customer names, or employee records are likely to be stored).
The most important thing to learning quickly is that you enjoy the projects you are working on, and are extremely interested. It will seem impossible to learn a language if you don't really want to do anything with it. On the other hand, you can be an amazingly good programmer in 6 months if you quickly start working on projects of interest, and are fanatical about solving the problems you set for yourself. Besides, you're 14 so you have the option of pushing your life and career in a direction that will give you both income and enjoyment in the work you do.
OK, is it just me or no one asked him the main question.
What do you exactly want to do ?
Do you want to play with hardware (ie have some board connected to a serial / parallel / USB port and have some LEDs flashing, have some sound coming out a speaker etc) or do you want to develop applications that have a nice user interface connecting to a database or even a game ?
Well, for number one, that will be assembly (ie for ARM SOCs) and C and that would require you to get familiar with hardware programming.
For number 2, I'd say C++/JAVA. I wouldn't recommand a language that is only supported by one OS (like C#) ...
Closed. This question is opinion-based. It is not currently accepting answers.
Want to improve this question? Update the question so it can be answered with facts and citations by editing this post.
Closed 9 years ago.
Improve this question
Is it possible to learn C# as your first computer language without any knowledge of the other three languages it combines?
I learned objective-c without knowing c first, but assuming I know nothing of C# or any other language is it possible to learn as a first language?
Yes. It's possible to learn C# as a first language.
It doesn't really "combine" other languages. It takes some inspiration from other languages, but doesn't use C or C++, etc, directly. C# is its own language, with its own syntax and rules.
You can learn ANY language as a first language.. Some are easier than others, and use different concepts. Personally, I think C# is a decent choice for a first language, since it has a good development environment, a great community, and is flexible enough to provide good growth and usage in almost any environment, but easy enough to not be overwhelming.
Yes.
....also (trying not to blow Microsoft's trumpet) Visual Studio is a very good IDE so that + the language will help any newbie get into the swing of things quite quickly
“It is practically impossible to teach
good programming style to students
that have had prior exposure to BASIC.
As potential programmers, they are
mentally mutilated beyond hope of
regeneration.” (E. W. Dijkstra)
IMHO, the importance of a first language is often overstated. E.g., people like to slag BASIC as a terrible first language. However, I was introduced to many fundamental concepts via BASIC (flow control, subroutines, etc.), as well as some more interesting things like:
direct access to and manipulation of memory via PEEK and POKE
self-modifying code! many cool things were done with this
optimizations such as storing data at the end of the code, which taught me a bit about how interpreters work
my first (and, oh, how I wish my last...) infinite loop (10 GOTO 10) - terrifying and beautiful at the same time!
That spurred interest in interrupts and soon I was doing assembly. Later I got into OO via JScript in classic ASP, and then more formally with C#.
I guess what I am saying is, is there is no one true language, and any of them is enough to open the door a crack, enough so you can see the big room filled with light beyond. So, yes, by all means, C#.
Many computer science curricula are using Java to introduce programming. C# is in many ways very similar to Java, so I would think a student could be pretty successful starting out with C#.
If your question is, "Is C# the best language to start out with?" then I think I'll leave that alone - the answer is going to be very subjective.
I learnt C# as my first "serious" language (I knew a bit of PHP and actionscript before, but nothing serious)
And while it wasn't horrible, I'd strongly recommend combining learning C# with learning C.
I learnt C# in school for 3 years, and then learnt C for a year, and came back to C# knowing how everything works MUCH better.
Especially recursion, arrays, pointers, etc. Just like assembler helped me understand C better.
To sum it up: It's not a horrible language to begin from, it's pretty noob friendly, but for deeper understading I'd learn C aswell.
You have to start somewhere. C# is as good a starting point as any.
Of course. C# does not combine languages!
It's a completely self-sufficient language that of course has roots/draws inspiration from Java, C and C++, but that does not mean you have to learn them.
Or do you need to learn Latin before you start learning Spanish?
Yes of course and IMHO it's a good choice.
Yes, C# is a perfectly valid language to learn first.
Yes it is a reasonable choice. Knowing the languages that came before it is interesting and useful, but is not a prerequisite.
See also http://portal.acm.org/citation.cfm?id=948843
It was my first, still using it 99% of the time today, 8 years later.
Certainly. But learn at least one other language too - it will make you a better programmer.
Yes, C# would be a fine first language. You can easily learn spanish/french/english without knowing latin.
C# is rather high level, so it will be easier to start with, and cuts out a lot of the crap you have to deal with with earlier languages (NOT because those langauges are bad! C# owes much of its beauty to its predecessors).
C# will also teach you Functional Programming early, which is becoming increasingly important in our industry as multi-threading becomes omnipresent.
Sure. One of the things that you learn about programming languages is that there isn't really that much difference between them. Once you learn one or two pretty well, you should be able to pick up others in a matter of hours or days - the syntax may change, but the concepts don't. What's challenging is getting the right mindset for programming in the first place and learning the API for getting things done with a particular platform and language.
C# is a perfectly good place to start because it maintains most of the features of more advanced languages while keeping away the most complex parts, and still allows you to develop full-featured GUI applications.
IMO, the ideal learning order should be:
A wide background on Math (strong arithmetics and algebra, good formal logic (a.k.a. Boolean algebra), and optionally some set theory).
A solid background on digital electronics.
A good background about hardware: what a computer has, what can it do, etc.
Machine code/Assembly, because it (machine code) is the only thing the machine really handles (and assembly is the only "sane" language close enough to it).
Some low-level language; probably C because of it's prominence at that level (does anyone build systems with something else than C/Assembly?). This includes going down to interfacing with your platform of choice (for example, building some GUI through the Win32 APIs).
Any OOP language, ideally C++ (because .Net languages and Java normally use intermediate bytecode).
A good interpreted language, like Perl or Python.
Anything you want.
While I really thing this is the best learning order (the knowledge acquired through that path always builds upon the preceding steps, and ends up covering most of the aspects relevant on modern computing), it'd be an utopia. I didn't follow that path (although I have dealt with most of the languages listed), and it's not practical to follow it on modern times: it may involve years of studying before you can take profit of your skills.
Recently, I started private classes on programming and I'm teaching maths (as needed), pseudo-code, and C#. Sincerely, I think C# is the sanest choice as the first language: it takes you quite early into nowadays' most used stuff: GUI, DB, Networking, etc, and it isn't as aberrational as alternatives like VB.
It would also be advisable to dive a bit on other languages spanning different paradigms, just to get a bigger picture about programming. I'd suggest Assembly (preferably on a virtualized system, because bad things happen) and Python or Perl.
Just my opinion.
Yes. The fact that it has syntactic roots in the C family of languages doesn't require you to know C, C++, Java or whatever: you can treat that as a historical curiosity.
Sure, just because it's like another language doesn't mean that you have to know the other language to learn C#.
Heads First C#
I'd go so far as to say that learning another language as a halfway step is more likely to leave you with bad habits than to reduce your C# learn time.
Start with Scheme ..that's what they teach in school first.
In my opinion may be it's possible to learn C# as your first programming language, but it's very difficult (I should say impossible) to learn programming using this language. Using any mainstream (may be it's better to say industrial or production) language. This languages are overloaded by different programming concepts, syntactically complex and has enough "dark places" to confuse newbies in programming...
And it's not only my opinion (of course). Take a look at what Niklaus Wirth thinks about it.
So you can choose another road and learn Component Pascal for example. The only problem on that way is the lack of books. It seems that this book is the only option.
Anyway, good luck!
I'm a C# convert and I freakin' love it when coupled with Visual Studio Intellisense and autocompletion. It's basically the nicest programming language/IDE combo.
I would say that C# is probably one of the best first languages as it teaches you some lower level, C-like programming but gives you an easier to use and manage object/memory platform.
It's a nice, clean language with good software and community support, and I wouldn't say it requires anything a beginner wouldn't have.
That said, I was faced with this question recently in helping a teenager learn to code. I decided in the end to steer him towards VB.Net instead; not because of any preference on his or my part - he didn't ask for anything specific, I use both - but I felt its increased verbosity was beneficial to a beginner. With less symbols and more words, I think most complete novices would find VB.Net a less intimidating starting point for no great difference in results.
Absolutely it is possible. I taught my son C# as his first programming language so that he could do a science fair project. He was 13 at the time.
I think C# makes a great first language for someone who will go into more serious programming or computer science. There has been a movement towards Python as a first language recently, and while I love Python, I think it's a poor choice for a first language because it lacks data abstraction. C# on the other hand, has excellent support for data abstraction (properties is one place where it shines compared to competitors like Java).
It also has a huge standard library behind it that enables beginners to write functional programs that do cool things early on (which is essential to keeping a beginner motivated).
After the student masters the basics of object-oriented programming, C# will also let them add other paradigms to their repertoire without having to learn a whole new language.
C# is a really good language to be learning first... However having learned C and VB .NET at first, in my opinion will give you significant boost :)
I think languages like: C, C++. Are the best languages for beginners - they help you understand how the system works - what is memory, how to use it, allocate, and so on. C# and its garbage collector allows you neglect this things.
Currently I am developing in the .Net environment using C# but I want to know whether it is worth learning python. I'm thinking of learning the Django framework. What is better?
Yes, you should learn Python, but it has nothing to do with Python or C# being better. It is really about making you a better programmer.
Learning Python will give you a whole new perspective on programmer and how problems can be solved. It's like lifting weights, except you're building up the developer muscles in your mind.
For example, if you've only ever programmed using a statically typed language then it is hard to imagine any other way. Learning Python will teach you that there is an alternative in the form of dynamic typing.
For a summary of Pythons benefits:
http://www.cmswire.com/cms/enterprise-20/2007s-programming-language-of-the-year-is-002221.php
Personally I feel you can write good/bad code in any language. I also firmly believe in learning a new language every so often for the sake of learning itself. On those grounds I say if you have the time just go for it. Python is a great language that many others are inspired from.
Whether one framework or language is better or not depends on your definition of better. Do you want more work as a programmer? Do you want to develop business apps quickly, or do you want to compute 3D matrix transformations?
Once you've answered those questions you might find yourself taking a completely different direction, say F# if you had particular interest in the financial or scientific sector.
It can't hurt to learn Python, especially considering some of the heavy weights (Google) are really getting behind it.
As for the actual use, it all depends on the application. Use the best tool for the job.
Never stop learning!
That said, how can you compare the two? How good is Python support in .Net? Is there C# support in Google App Engine? It really depends what your target system is. Therefore, the more languages you have the better equipped you will be to tackle different challenges.
Depends on what you will use it for. If you're making enterprise Windows forms applications, I don't think switching to Python would be a good idea.
Also, it is possible to still use Python on the .NET CLR with IronPython.
What's better is inherently subjective. If you like Python's syntax - learn it. It will probably be harder to find a Python job, C# and .NET in general seem to be more popular, but this may change.
I also think it's worth to know at least one scripting language, even if your main job doesn't require it. Python is not a bad candidate.
Both are useful for different purposes. C# is a pretty good all-rounder, python's dynamic nature makes it more suitable for RAD experiences such as site building.
I don't think your career will suffer if you were competant in both. To get going with Python consider an IDE with Python support such as Eclipse+PyDev or ActiveIDE's Komodo. (I found a subscription to Safari Bookshelf online really invaluable too!)
I have been thinking about this same question myself. I believe however there is still a lot of stuff C# can offer that I want to get good at before I job into Python. Because Python is easier to learn it. One advantage I have found in languages is not the language itself but the materials available to learning them. For example let's say you could make a 3D game in JavaScript, but you would be more likely to find resources to do so in C++. Or you could make phone apps in PHP but C# or Java would have more material out there to help you with the phone apps. For me personally I know when I become good at programming in C# I will be able to branch off into other languages. This is the main reason I have chosen to devote most of my time to that one language. I also am learning a little bit of Java and C++ just practice thinking in other languages. I think in the future however Python will become more popular because coding is becoming more popular and Python is the easiest of mainstream languages right now.