|
BiggerDon wrote: I am most interested in how you've gone about being self-educated in different languages and technologies.
A variety of ways - in the early days (1980's) I learned BASIC and assembly from reading books, which then actually had meaningful content. I also soaked up all the hardware books I could find. I learned C from K&R, C++ from Stroustrup and others, and Pascal from Borland. College taught me Fortran
C# I learned from playing around with it and reading MSDN articles - it was an easy enough transition from C/C++.
Conversely, Ruby on Rails was a monster. My first intro to a duck-typed language as well as diving into Ubuntu, web development (and all that comes with that). My client was also my mentor, and that was absolutely necessary and a far better experience than any collection of books could have given me, or classrooms, IMO. After two years of that, I've concluded that duck-typed languages are a Really Bad Idea.
I picked up PHP in a couple of hours -- the online documentation / community is outstanding.
As of two weeks ago, I'm doing my first ever Java coding. Some gnashing of teeth at some of the BS in the language, and I find the Oracle documentation sort of sucks. Funny how with PHP, I would find answers on the PHP site, while with Java, I find answer on Stack Overflow. However, Java is so similar to C# that it's a fairly easy transition, most of the learning curve is in the IntelliJ IDE and figuring out what framework components support what I want to do (like event listeners, hashmaps, etc.)
My recommendation? Start with what I think is the best programming language out there right now: C#. Everything else I've found to be a teeth gnashing experience (mind you, not that C# has those moments too, but they don't usually require a visit to the orthodontist afterwards.)
Marc
|
|
|
|
|
Great advice and great post.
Also, C# is such a great language isn't it?
I like it so much. There are many reasons to use it.
1. well supported
2. makes man things very easy
3. nice clean language
4. true OOP concepts supported
Power and beauty, but of course there are things it lacks too.
The new concurrency libraries are very cool. They keep adding cool stuff and yet a new learner can do simple stuff easily.
Really like C#.
|
|
|
|
|
Marc...Thanks for the reply.
It looks like I may need to give c# a look-see based on the number of people talking it up. My only question (for myself, not you) is "What would I do with it?" That question might open a whole case of caviar!
"Duck typing" was a new term for me. That's what I get for becoming a process consultant and project manager, eh? I feel like I've been out of class and need to figure what happened in my absence. Not to worry, though. The 15 minutes I spent reading about it just now was time well-spent and a bit humoirous. It reminded me of an early data modeling effort in which we spent a day driving the model to complete abstraction until we realized the assumption was "If the data doesn't fit, the error routine will pass it by."
...and thanks for the links in your sig. Getting back into programming I need to think at a higher level than syntax and error handling routines.
cat fud heer
|
|
|
|
|
BiggerDon wrote: My only question (for myself, not you) is "What would I do with it?"
Well, I'll answer anyways! I'm looking for people wanting to contribute to HOPE - developer roadmap[^] and would be more than happy to pick some small projects and offer mentoring services.
Marc
|
|
|
|
|
I may take you up on that. It would be good to stretch myself into someone else's project instead of always playing lone wolf.
cat fud heer
|
|
|
|
|
Ten years ago I was made redundant. I self-studied by buying an old copy of VS 97 Enterprise. Then I shopped on ebay for an old box that I could put NT4 on.
Thus I had two boxes, the vintage one with all the visual studio boondoggles from 1997, and my main one with the Express versions of vs 2005, for learning C#, VB.NET, ASP.NET and ADO.NET.
Then I started working through second hand books.
What did 97 teach me? COM, MFC, Win32, VB5 OOP(almost the same as VB6, which still sells at a huge premium),Databases, simple Access, SQL Server, client-server, Crystal Reports.
I also picked up a third box to play with Linux.
Of course with all these boxes I needed networking and pipes. To learn remote sql server programming for example.
Within 2 years(I had commercial vb and C already), I was being flown out to Amsterdam and Belfast for interviews
Meaning, you start small, but growth doesn't have to cost the Earth. And Dan Appleman(the software author and entrepreneur), replies to requests for help with free copies of his old stuff and friendly encouragement.
|
|
|
|
|
Simon, Thanks.
I'm not much of a server/com guy. I can set up a home network and share printers, but that's about it.
I see bigger lessons there, i.e. learn what you need and try to have multiple platforms. Since I had been doing most of my work in MS-Office VBA I've done what I can there. I own one Win8 machine with Office 2013 and another with WinXP/2007. By luck, the laptop my employer provides has Win7/2010. My thought when picking up the Win8 machine last month was that gives me 3 environments for testing, even being a lone wolf type.
cat fud heer
|
|
|
|
|
BiggerDon wrote: What would I do with it?"
Pretty much almost everything. And now with the great Visual Studio Community Edition[^], you have the best IDE, full featured, for free. And you can worry about the many frameworks that supports C#, to name a few:
- Web Development: ASP.net (WebForms, MVC, Web API, etc)
- Desktop Development: Console, Windows Forms, WPF
- Middle-ware Services: Web Services and Windows Services through WCF
- Embedded Systems and IOT (Internet Of Things): .Net MicroFramework
All of this with a great community support.
To alcohol! The cause of, and solution to, all of life's problems - Homer Simpson
----
Our heads are round so our thoughts can change direction - Francis Picabia
|
|
|
|
|
Thanks, Fabio.
I was thinking more in line with "What problems are nearby that I will solve with that?" As I said, that was more a question for me than anyone else. I see your answer as "Where can I find opportunities to use this?" What you've given me is food for thought on my question.
Also, thanks for the link to Visual Studio Community Edition. I've been stumped in the past with "Ok, that's nice, now where do I get my hands on the environment?"
cat fud heer
|
|
|
|
|
I'm glado to help. I believe you will be pleasantly surprised on the power and ease of use of Visual Studio
To alcohol! The cause of, and solution to, all of life's problems - Homer Simpson
----
Our heads are round so our thoughts can change direction - Francis Picabia
|
|
|
|
|
BiggerDon wrote: writing is a means to make certain I know what I think I learned
Far too few people know this truth.
Have you ever read a Head First book (example Head First Design Patterns -- amazon link[^])?
I don't care for those books at all, because they contain huge distractions -- annoying comic-strip bits and pictures etc.
However, the Design Patterns book is quite good.
Head First Intro
However, the introduction to those books has a great explanation of recent discoveries about how the mind remembers and learns things. Basically the mind only remembers things it deems important. Since survival is one of the most important things, you tend to remember things that will harm or kill you, like the fact that a lion will eat you.
Other things, like facts on a page you rarely remember.
The point is that you must make your mind believe something is important to really learn it.
Dopamine's Part In Learning
There's a whole deal about dopamine release in the brain that is related to learning also.
You also tend to remember things that you like. When you like something dopamine flows through the brain and makes you feel good. When you feel good you tend to remember. This even tends to be a huge circular system.
How Do I Make Things Seem Important?
I take a program I really like or am very interested in and usually that program will be one created by a large company --- for example Microsoft -- then I think, "Hey, how could I write this program myself and give it away to everyone for free? And, how do I make it better than the one people are paying for?"
Make It For Myself
The third way I make something important and exciting is by making it for myself. I've always done this and recently we've heard a lot about Steve Jobs doing this. It is a huge motivator and you end up learning faster this way.
Right Tool For The Job
Next I determine if it is a desktop app or a web app. After that I choose a framework which has a large number of adherents so I can learn something that is marketable.
Along the way I may run into things that need a solution like how to store data for a web app.
RSS Reader
Recently, I wanted my own RSS reader which would allow me to store my RSS feeds and pull them up later.
I ended up using (and learning) AngularJS (Google) and Firebase API (data storing on web). You can see that project here at codeproject: FreedReadR: RSS Reader Created With AngularJS (part 2 of 2)[^]
Conclusion
1. Make something.
2. learn the technology you need to make that thing.
3. be happy.
|
|
|
|
|
newton.saber wrote: There's a whole deal about dopamine release in the brain that is related to learning also. No wonder my head is spinning when I leave work these days.
No object is so beautiful that, under certain conditions, it will not look ugly. - Oscar Wilde
|
|
|
|
|
First, kudos for continuing to learn! That's more than most people do to begin with.
Second, don't minimize anything you learn, regardless of language, the concepts are valuable.
While it may be true that most developers don't use VBA, you are programming. Also, I have met many people that did not study CS in college and are great developers. One guy had a law degree.
There are so many languages, infinite ways to solve problems, the choices are dizzying. I think the first thing I think you should do before you think about technologies, is decide what you want to do with your skills.
If you want to continue to do tasks that are geared towards automating processes, python would be a good way to go. It is a general purpose scripting language that is widely available on all types of systems.
If you are interested in web technologies, JavaScript would be a better choice.
If you want to learn more general purpose programming, you can download Visual Studio Express for free from Microsoft and start learning VB.Net or C#. C# being the more valuable of the skills.
Once you decide what you want to do, and choose a language based on that domain, get a book to help guide you. You don't even need to spend money, you can get many great books at the library. There's lots of stuff on the web, unfortunately you need to know what you are looking for to find it most of the time.
Like others have said, there are so many frameworks, and complicated technologies. Try to focus on just learning like you have been. Solve small problems. Even make small personal utilities for yourself, something that will keep your interest.
I have stayed with C++ my entire career, with the need to familiarize with JAVA, C#, Python, JavaScript or other technologies for a short period of time. I have remained primarily a general purpose developer with solid software architecture skills. Taking the stance that if a path leads me in a direction that I need to learn a new technology, that is when I pick it up.
Frameworks and libraries come and go as time passes. The languages for the most part is what stays the same.
Programming itself, is similar no matter what language you choose. You break bigger problems into smaller problems until they can be solved with the tool you are using. Focus on improving your problem solving skills. Once you are proficient with one language, it is much easier to pick up others.
The fool's errand would be to stop learning.
|
|
|
|
|
Paul M Watt wrote: Also, I have met many people that did not study CS in college and are great developers. One guy had a law degree I studied CS back when, but now I want a law degree.
No object is so beautiful that, under certain conditions, it will not look ugly. - Oscar Wilde
|
|
|
|
|
|
Paul, thanks for the reply. There's a lot in there and all of it appreciated. To be honest, I'm a bit overwhelmed (in a great way) with the number of responses, as well as their depths of knowledge and humanity.
At this point of the day I'm thinking there is no single language for me to hit in the short term, so I'm thinking of a short-list of 3 to 5, and probably 3 is the max. A lot of that will be driven by whether I can find some project that uses one or more of those languages, then they will (of course) come to the front burner. Chickens, eggs; languages, projects.
cat fud heer
|
|
|
|
|
If you can stick with one long enough to become proficient, I think that will help you the most.
Every language has a basic set of constructs, and you can combine those to create programs with linearly defined logic. That is a single large function that handles everything in sequence of commands and loops. But every language has its nuance for its own way to do things better.
you won't pick up those nuances and the best practices of the language if you are splitting your time learning many at once. If I were learning new skills today, I would try to only focus on one, unless I was test driving them to evaluate which one I want to learn deeper.
I realize everyone learns differently, so I acknowledge that your planned direction may work best for you. Best if luck.
|
|
|
|
|
Well, I am a pupil with the age of 16 and never learned any serious programming in school. I thaught myself (via internet and some books) six languages so far (VB.NET, C#, C, C++, some Python and Java). Unfortunatly, my grades in subjects such as german and english decreased because of that hobby. Nowadays, however, I do all my school work and only spend a little of my free-time with programming. I have no idea what I should study after school to be honest...
If I were you, I would actually focus on .NET languages because the .NET framework will more or less become cross-platform over the next years. But that's all I can tell you because I am, as far as I know, one of the youngest here on CodeProject
|
|
|
|
|
Niquo, thanks for the reply. I'm probably at the other end of the age spectrum here, probably even older than your parents.
It's good to see the insights of someone who is looking at the future of all this. They are much appreciated.
Take care. Study Hard! (Did that sound parental enough? )
cat fud heer
|
|
|
|
|
BiggerDon wrote: From there I started to learn VBA (I know, it's not as good as any other language a real programmer would use!) A programming language is nothing more than a tool used to solve a problem. If your problem is solved, you have nothing to "apologize" for.
BiggerDon wrote: Of course, I am interested in your opinions as to which language(s) to go after to build more knowledge and understanding, whether you think this is a fool's errand, etc etc. I am most interested in how you've gone about being self-educated in different languages and technologies. I personally think that learning a computer language without first learning programming principles, methodologies, and problem solving, is taking a step in the wrong direction (I base this opinion on many years of watching the types of questions asked here at CP). Now if you already have these skills, then learning a computer language is trivial. While their syntax is different, they all have a common goal, and switching between a handful of them should not be a big deal.
I've seen way too many instances where a person will be presented with a problem, and that person wants to immediately run to the keyboard and start banging out code (using their favorite language). The issue arises when they do not have access to that language and thus cannot think their way through the problem.
"One man's wage rise is another man's price increase." - Harold Wilson
"Fireproof doesn't mean the fire will never come. It means when the fire comes that you will be able to withstand it." - Michael Simmons
"You can easily judge the character of a man by how he treats those who can do nothing for him." - James D. Miles
|
|
|
|
|
Thanks, David. I couldn't agree more with your post. As to having the basics, I think I'm there since I cringe at the words "Go To" and still scribble out structure diagrams when I am building something.
Methodologies? Does being on the methodology teams for a major corp and Big 7-6-5-4-3 firm count.
One of the reasons I'm re-learning to program is my work took me up the process (lots of time in business systems/process analysis) and to areas like data center consolidation and production change management that I had never considered when I was in application development, way back when.
cat fud heer
|
|
|
|
|
Individuals learn best in their own way - there's no 'right way' of learning. some folk need a class with real-time Q&A, some prefer self-paced 'how to' books, some online video courses, etc.
Personally I find that having something to actually achieve is my starting point. Rather than a course that shows me how to produce this simple outcome, or even a complex outcome that makes little or no sense to me, I start with a project.
Then find out how to do it using google-fu
There might be some courses out there that help with bits, some blogs that help with others and sometimes I might even resort {shudder} to Q&A @ CP
And blogging about it helps- as you have said - as a teacher, getting one student to explain something to another is a great way of making sure they understand - and identifying the bits they don't.
so, I would take something you have done in VBA & start off with a 'how could I do this in google Docs' - and see where it leads you
PooperPig - Coming Soon
|
|
|
|
|
I prefer self directed learning personally. If you have the free time for it s course will be great but generally you only learn enough to be dangerous.
Here is what I tend to do
1. Read enough to install the language and any IDE there is. THis can take a while or may be impossible ( I failed to get julia installed on REDHAT at work, but it went like a dream on my MacbookPro and works well in Windows on my work box.
2. Then write a hello world program. I start with hello world then start working out how to import modules from other files so I know I can build libraries if I wish
3. Now pick a project: I often repeat something I did in a language I know, for example a prime number sieve is relatively simple and you can benchmark it against other languages. Alternatively something I read might gove me an idea but most of those ideas require a lot of time and effort and get frustrating when leanring a new language
4. If no project comes to mind try somewhere like Project Euler or just google on "Undergraduate computer science projects"
5. As to the two languages you mention: Download AptanaStudio 3 for JAvascripe. I think it also includes PYDEV, but I always install Pydev for Eclipse. The IDE is a little temperamental and sometimes it is easier to run javascript externally. Use Firefox and install developer tools
6. If you are doing this privately be ready for lots of WTF moment and a lot of googling and going the wrong direction.
|
|
|
|
|
Thanks, aayawa!
I've been through plenty of hair-pulling and googling for answers. I remember one function that would crash Excel at its exit. It took me two full days to find out what I did wrong on that one!
As to re-building something in the new language, that was in my thoughts, too. Those functions I developed in VBA should mostly be useful in Google Drive and OpenOffice, or so I would think. It becomes a matter of translating the basic syntax/flow then figuring out how the different object models are accessed and exploited, or so I hope.
My next step (assuming the Google Drive/OpenOffice) is that I had started a call/visitor log project for someone using VBA/Excel. I might pull that from the archives, take it to a point, then re-do it in the other environments/languages.
And thanks for the leads on the IDEs. Much appreciated.
cat fud heer
|
|
|
|
|
BiggerDon wrote: I am most interested in how you've gone about being self-educated in different languages and technologies.
Books, books and then, more books. At the age of 15 I had a thousand page VB 5 teach yourself book sitting on my lap, while I was in front of my computer trying out what the book was teaching. Of course, nowadays a kindle won't feel so heavy and cumbersome.
This may take a little while of your time, but it is a lot of fun and you can learn things the right way. And the best part is, it is cheap. Plus you can learn on your own pace.
It worked very well for me to the point that I started my career before getting to college.
To alcohol! The cause of, and solution to, all of life's problems - Homer Simpson
----
Our heads are round so our thoughts can change direction - Francis Picabia
|
|
|
|
|