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
I've been programming for a few years in C# and XML. I used only the basics of those languages and have survived on the web for info like arrays and text manipulations. But when I am get interview, the interviewers ask only advanced questions - I found the answers later in the Advanced sections in the books on the subject.
Why do the interviewers ask such advanced questions? The job looks almost the same as what I was previously doing, so there's need for advanced knowledge, like what class delegate is or XPath commands.
Questions are:
What version of XSL does .NET 3.5 uses?
What XPath command to use to get value in element X?
What are class delegates in C#
Does C# allows multiple interface inheritance?
How do you access GAC in C#?
There are two reasons that I ask them.
To see a person actually say "I do not know the answer to that", as opposed to trying to BS through the question.
To see what kind of logical problem solving skills a person has.
Usually a question will be of one or the other, but not both. Both are extremely valuable in screening a perspective employee, however.
Also, the question might not actually be "advanced" for the position. It is reasonable to assume that Senior-level and/or Architects can answer questions that a Junior to Mid-level might not.
Perhaps because they are trying to find programmers who know more than the basic stuff. If they are trying to distinguish between a field of candidates, it isn't helpful to ask questions that everyone knows the answer to - how do you select among those candidates? If you're going to hire only 1 or 2 out of a pool of candidates, you need to find some harder questions that only 1 or 2 out the pool can answer.
Getting the answer wrong is what I want from an applicant in some cases.
One of the reasons I like to ask a question that I think the applicant will get wrong is to see how they adjust to the situation. How they handle getting something wrong and handle someone telling them how they should have answered etc. If they are very defensive or rude when you tell them they are incorrect then it is a good indication of how they will work on a team when many times your ideas will be challenged.
If they take the solution or recommendation and realize they can learn from it or even add to it that is usually a sign of someone what is easy to work with and willing to work 'outside of their box'. If they just make excuses and dance around trying to say why they could be right or should be right (in cases where they are clearly not) then this tell me when the same issue arises in the future this applicant is going to cause headaches.
Not so worried about the answer, more interested in how they react to the question / solution.
Another reason would be to gauge their level when hiring as well. You might be hiring for a bunch of positions but not sure where this applicant fits. Hard questions that show problem solving and attention to detail can sometimes make it easier to categorize their skill set.
I ask advanced questions for a few reasons:
Some of my questions are advanced usage of things everyone should know (not a trivia question) -- I want to see you reason through the answer using knowledge you have, but in a way that isn't common.
I want to see what happens when you don't know something -- do you give up?
I want to hire people that are serious about what they do. People that really care about the technologies they use tend to want to know the advanced stuff.
I want to see if there are gaps where you just don't know that an entire area of knowledge even exists. For example, in your XPath example -- I might be ok with: "I believe that XPath could be used to help solve this, but I don't know it well enough to write it out here" -- then I would show them a little XPath and see if they could apply it. If you don't even know that XPath exists, google isn't going to help you.
Likely they're just getting a gauge of where you are. They probably got stuck on this problem themselves and perhaps wanted to see if you could think of an answer on your feet.
I've experienced the same types of questions, and considering when I program I use excessive resources, this type of thing usually throws me off. Their loss.
Because competency as a programmer involves both depth and breadth of knowledge.
The interviewer is trying to devine your level of knowledge, and he is copping out by "borrowing" a question from the last chapter of that book.
Really, this is sloppy work on his part, relying on one question to guage your expertise level. You may have low programming skills, but recently come across the buzz-word, and are able to ace the interview.
I did get burned once in interviewing a candidate who professed high levels of C expertise. It turned out that he was reading "C for Dummies" and managed to BS through the interview process. I admit that I wasn't concentrating on his programming skills, but was looking for other aspects, which he also managed to BS through. Turns out his whole resume was a pack of lies.
Nowadays, I make sure the candidate has working knowlege of variable scope, persistance, pointer arithmetic, basic algorithms, structured programming, object-oriented programming, polymorphism, multitasking and inter-process communication. I will quiz him on his debugging skills, and zero in on details such as race-conditions, heisenbugs and security vulnerabilities.
Depending on the job, I will ask about experience in the target language - such as key=>value maps (arrays) in PHP, Swing programming in Java, event handling in C#, tables vs CSS in html -- you get the picture.
If the candidate passes the first part of the interview (I usually know within about 5 minutes), I will then give him a binder and send him into the coffee room (nice couch and table there) to prepare for 20 minutes for a code review on a selected module.
That's when I send in the troops - employees are instructed to use the coffee room normally, introduce themselves and make conversation for about a minute.
What I'm looking for is the ability to concentrate on a task (blatant ADHD), the ability to work under pressure, and interpersonal dynamics.
When the candidate returns, I have him act as main presenter and start our normal code review process. The first thing I look for is if he read the page titled "Code Review Process". I'm not looking for him to complete the review - about 10 minutes is enough. As a matter of fact, the fewer main lines processed, the better - within reason.
I haven't been burned by a new hire for a long time now.
Your username suggests you like coding (duh), but your question suggests you don't. If you really liked coding, then you should love to learn about it. Those questions that you listed are not that advanced.
Even if those questions were advanced, the interviewer is trying to gauge how much knowledge you have in the area that you say you have knowledge in. They are also trying to gauge how well you would fit into their group.
P.S. Not to be mean, but if you program using XML and don't know what XPath is, then you are a little far behind.
They probably want to see if you really know what you're talking about or if you're a novice programmer who gets along on the web using only what he has picked up through trial and error...
1.What version of XSL does .NET 3.5 uses?
Because they can't tell important things from non-important ones. Bad sign.
2.What XPath command to use to get value in element X?
Because they want to see if you know XPath. This can be either because they use it extensively and you need it to get they job done or because they think XPath knowledge == skill.
3.What are class delegates in C#
(I've never heard the term "class delegate" and a google search shows no definition, so I assume you mean just "delegate").
Delegates can hardly be considered an advanced topic.
4.Does C# allows multiple interface inheritance?
If they really asked about "interface implementation", it's part of the most basic concept so it's a valid question (although too simple to really mean anything). If they really asked about "interface inheritance", it's more of trivia, but I would still say acceptable. Bonus point for them if they asked what "interface inheritance" really means.
5.How do you access GAC in C#?
This is the kind of thing every team MUST have one person who knows. I'd say it's also a indication of seniority (which BTW, I don't care much about) since nobody reads about these things, the only way to find out is to be forced to solve a real-world problem.
I ask advanced questions to try see how people work through the problem. I like to ask questions that I don't know off the top of my head for that reason.
I want someone who is a critical thinker rather than just an academic who can recite text books to me.
They want to find someone with practical experience that extends beyond what is taught in beginner courses. When my company interviews candidates, we often find that most of the applicants cannot solve what we would consider to be very basic programming problems simply because they don't know the API or don't understand when to use various basic data structures.
If you want to impress an interviewer, work on your own programming projects outside of class. Learn a good chunk of the language API, and start learning about third-party libraries that can greatly simplify your work.
Another reason is to gauge your response to a question they really don't expect you to know the answer to. Problem solving skills are essential, so asking you questions you already know the answer to is not going to address that, is it?
There are even instances of companies asking odd, non-programming related questions just to see how you think your way through a problem. There is the classic "Why are manhole covers round" question, reportedly asked at Microsoft interviews.
More Microsoft interview questions
I'm not meaning to offend you but maybe your understanding of the job is not deep enough and it in fact requires knowledge of advanced techniques.
Also, you can do a lot of things with basic methods but advanced methods might the better way to implement regarding complexity, time to implement or maintainability.
There are many possible reasons. They may:
actually use those techniques (delegates and XPath aren't particularly rare or obscure)
have a large pool of candidates and want to try to find the more knowlegable ones
want to see where the limits of your knowlege are, so they ask question up to the point where you start to be unable to answer well
want to see how you might approach areas that are unfamiliar to you - to see how you might adapt to new stuff
want to show off their own knowlege (probably not a legitimate reason, but it certainly happens)
I've heard these really aren't in use anymore, or at least not nearly as much as they used to be, but you might be interested in this. I picked up a pretty cool short book a few days ago that has to deal with the "Microsoft style" logic interview questions that are sometimes asked. I'm a few chapters in and it gives a neat little history of the tech field's interview style and has a ton of logic problems, complete with answers in the back.
It's called "How Would You Move Mount Fuji" and it's on amazon for pretty cheap.
http://www.amazon.com/gp/offer-listing/0316919160/ref=dp_olp_used?ie=UTF8&condition=used
I've just completed a round of interviews, where I use a three or four stock 'simple' C# code fragments that the interviewee will look through and attempt to explain what the expected result will be. In each case the code sample is no more than ten lines of clearly-formatted code that utilises basic C# skills (inheritance, generics, anonymous delegates); also in each case there will be a 'gotcha' - but like others have stated, I don't put these in to be spiteful, they're there because I want to see how the candidate reacts when confronted with something that doesn't work as expected.
We had a candidate recently that had sailed through the first part of his interview; impressive CV, was apparently the Lead Developer of a team of 10 and had been developing code in C# since 1.0; yet apparently had no idea what "Console.WriteLine()" did (nor could he even hazard a guess), nor could he even begin to cope with the tiny anonymous delegate example.
Another candidate was self-effacing, and didn't know how to grade herself as a developer - she'd had less experience than the former candidate yet she sailed through the code samples, fell for a couple of the 'gotchas' but asked the right questions to get the correct conclusions and genuinely learnt from the experience. Needless to say, she was hired.
If you're claiming domain-specific knowledge (like XML) you should expect to be asked specific (and sometimes hard) questions about that domain; if I'm interviewing a senior ASP.NET developer and they've got no idea about HttpModules or HttpHandlers (like some recent interviewees) then alarm bells start to ring.
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 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
Ok here is my situation. I've studied Java in my college for 2 semesters. But you know they teach you jack in there, just the basics. We skipped half of our textbook and even then our professors don't teach from section to section of each chapter. I don't blame them. It's hard as it is for new students to understand even the basic concepts of programming. Now this is a community college we are talking about and not Stanford, MIT or Berkeley.
So like I said I've done 2 semester of Java. I really like our textbook because it has some challenging projects to do at the end of each chapter. This textbook is pretty clear and i have no problem understanding it (although 2-D and 3-D Arrays have given me some trouble). I have tried reading a few C# books such as Pro C# 2008 and .NET 3.5 and C# 4.0 in a Nutshell. I found these books to be dry and overloaded with information that put me to sleep (No offense to the authors of those 2 wonderful, according to amazon ratings, books).
Would you suggest I finish my Java textbook, brush up my knowledge of Arrays, Polymorphism, and etc that are universal to most programming languages. And then switch to C#, plus the syntax is very similar so it should be easy to switch. Or should I just start learning C# right now from the very beginning? If it's the latter then could you recommend some free online resources that will keep me engaged and at the same time teach me everything I need to know about C#.
Someone has recommended me to learn .NET first, but I found it to be not the brightest idea. .NET is just a big monster full of libraries. How am I going to apply it if I don't even know the C# or VB!? Anyway back to my question: Master Java and switch to C# or just go with C#?
DISCLAIMER: I don't want to start .NET vs J2EE or C# vs Java flame war. I am going with C#. I've decided that I want to work in a Microsoft shop in the future. .NET is what I want to learn.
Thanks! Will be waiting for the answers.
I found myself in pretty much the same situation as yourself whilst studying Java at community college - I am smiling right now :). That was 10 years ago and D flat, as some wags were calling it, was starting to make some noises.
What I did, was do all of my assignments in both C# and Java, so that I could get to grips with both. I then begged to do my final year project in C#, which they eventually relented on. Getting practice in a couple of languages and doing a major project will stand you in good stead.
I have never looked back. Good luck! :)
Both Java and C# concepts and syntax are very similar.
I would concentrate on the one you expect to use after completing your studies. Look at which is asked for more often in the area you are intending to work.
As a side note, C# 4.0 in a Nutshell is an excellent book both for learning and reference. Suggest you give it another go.
I think I found the answer to your question...in your question.
For now, go ahead and finish your Java book as a way of continuing to learn the fundamentals of OOP.
Next (or while finishing the Java book), shift your focus to C# and the .NET framework (in most business situations, you'll be hard-pressed to find one without the other).
If you want to focus more on language elements of C# rather than a specific framework (such as ASP.NET, Silverlight, Windows Forms, or WPF, to name a few things), you might consider a book on LINQ, such as LINQ in Action from Manning Press. Combine your knowledge of LINQ with trying to solve some problems at http://projecteuler.net and you should start picking up the language pretty quickly.
Personally, I read Illustrated C# 2008 by Daniel Solis. Granted, it's not a textbook filled with lots of fun and challenging examples, but it is a good exposition of the language.
Don't worry so much about any particular language, and "Teach yourself programming in 10 years": http://norvig.com/21-days.html
Since it sounds to me like you don't really know a lot about programming, and this is largely your first major exposure to it, I think it's absolutely in your best interest to stick with something until you have learned enough of it that you are satisfied with your skill level. Jumping now may hurt you later, because you will be covering a lot of concepts you probably already know.. but hidden inside will be something you don't, and thus you will skim right over it.
Keeping yourself "engaged" is only something you can do, not the text. Certainly some texts are more interesting than others, but you have to be committed to reading the material whether or not you find it boring. That's how you learn.
Both Java and C# are syntactically similar at the basic level, but they both diverge from there in different directions and do similar things in different ways. Further, the languages are largely useless without the base class library, and those are often very different between languages.
What you didn't mention was how you are doing in school. Does your school require you to do more java work? If so, then you will have to stick with it. If not, and you are "done" with it, then perhaps starting over with C# from the beginning would not be a bad idea. Just think of C# as a new language you have to learn from the ground up, even if much of it seems familiar.
I found the Wrox book series to be particularly good to learn from, along with the Head First book series. As for which one to continue I would say it depends on what you are tested on. If you have to do written exams and write out sample code. You don't particularly want to start banging out C# by accident.
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
I am not the only programmer, but I'm the only .NET developer, everyone else works with Perl, Ext JS, and related technologies. I'm primarily self taught, using Codeproject heavily to learn new techniques.
Without any mentors at my company specifically knowledgeable in .NET, I'm unsure whether classes, or online tutorials, books, or perhaps some other avenue might be most effective at helping me to become a better developer.
My goal, optimistically, is to become a developer capable of managing the next .NET developer we hire, or at least to integrate well with him/her.
I'm currently taking on the task of documenting my programs in such a way as to receive review from the more experienced developers at my company regardless of them not knowing .NET, and I expect this will be rather general, but hopefully still beneficial.
Does anyone have suggestions or advice for how to most effectively learn good practices without direct oversight?
Without mentors around, there are several things you can do to improve your skills:
Take classes...especially if your employer will pay for them.
Read books. They're the next best thing to a class.
Read developer blogs. They may not teach you best practices, but they'll keep you abreast of what's new in the development world. That'll help you keep from falling behind.
Courtesy of the Community Listen to Podcasts (Hanselminutes, Stackoverflow, etc.) and watch Screencasts (Dimecasts has tons of good content).
Participate in the community. We may seem harsh at times, but you'll hear the most about best practices, coding techniques, design patterns, etc. and different ways to apply everything.
I have always worked like that. My ways to improve are:
Reading high-quality blogs
Applying what these high-quality blogs recommend (whenever it fits your project and when time allows, of course)
Reading high-quality open source project's source code
Writing as much code as you can, always keeping in mind what you've learned and always trying to raise the quality bar. Practice does not make perfect. Only perfect practice makes perfect.
Keep an eye on stuff that's unrelated to your own line of work. For example, if your main job is coding ASP.NET in C#, read stuff about functional programming, F#, Haskell, other web frameworks like django, Ruby on Rails, etc. I'm not saying that you learn them, just see how things can be done differently. It will broaden your perspective.
When you gain some self-confidence: contribute to open source projects, write a blog.
About books: IMHO the books that are highly-technical (i.e. "Buzzword 2.0 in Action!") aren't worth your time. Everything happens so fast that they'll probably become obsolete 6 months after their release. The only books worth buying are those that deal with the underlying CS or architecture issues.
About classes: it's very hard to find high-quality non-university classes that aren't a waste of time/money. Most of the time you can learn faster by yourself. (UPDATE: fast-forward to 2013, MOOCs are an amazing, high-quality, free learning resource)
Also be wary of codeproject, there are lots of articles there with errors and/or general bad advice.
I am in the same situation you are in. I learn mostly from
previous projects/mistakes, especially when you take over an old project from someone else (50%)
google (25%)
forum/stackoverflow (25%)
Change employers. I'm not trying to be a jerk, seriously. The most growth your going to have as a developer is by working every day with someone significantly better than you.
Join some OSS project which works with .NET to get feedback on your code from experienced .NET developers. In addition looking at other people's code is a great way to learn new things - just as you have been doing. I also agree with Justin also that reading blogs like Eric Lippert's is very rewarding
Take advantage of the chance to learn the languages and technologies being used by by your colleagues.
They'll introduce you not just to syntax, but more importantly to techniques, idioms, and paradigms that you won't find in .Net, but that will challenge you to think about how you could apply or build those thing in .Net, or why .Net doesn't have or shouldn't use those things.
Why is Perl weakly typed (or is it)? What's Perl better at than .Net? What is .Net great at the Perl is just terrible at? Why do these differences exist? How might you implement a Perl interpreter in .Net? Why might you want to?
Why's everything in a JavaScript a hash? How does .Net class inheritance compare to JavaScript prototypes? Are JavaScript's first-class functions a great tool or a source of obscurantist abuse, compared to .Net's strongly and statically typed classes?
What are the fundamental data structures in each language? For each language, why are those types fundamental to that language? What were the different design decisions (or lack of decisions) that motivated and informed each language's design and implementation? Can you discern any common "ancestral" languages among the languages used at your workplace? Why don't we have "One Language To Rule Them All"? Should we?
Finally, excellence at any one language is really great to have, but unless you're sitting on that language's Standard Committee or writing compilers/interpreters for that language, a broader knowledge of the underlying algorithms and data structures and patterns that are common across languages is probably more important to your development as a programmer -- and certainly to managing programmers, if that's your goal.
Look for local .NET user groups. In most cities, you are likely to find at least one. User groups are a great place to develop contacts, ask questions about the technology and basically get answers to problems you may be experiencing. If there are no user groups in your area, try looking online.
If you are free to choose how you develop, and you get new projects fairly often, pick a new technology you're not familiar with to use on each project. Of course, do your research first and make sure it makes sense for the project.
At my last company, I was pretty free to use whatever I wanted as long as it made sense and worked. I always tried to use something new on each project. The last project I worked on, I used NHibernate. No one told me to learn NHibernate, but I took it upon myself to use it to expand my knowledge. Of course, I made sure NHibernate was acceptable first.
The best way to learn something is to use it. Classes and books are good, but nothing will make it stick more than using it in a real project.
My goal, optimistically, is to become
a developer capable of managing the
next .NET developer we hire ...
In that case, you should be looking to expand or improve your people/project management skills as well as developing your technical programming and design skills in your chosen technology.
I also subscribe to the view that it is not a good idea to focus too much on a particular technology; e.g. .NET. Too much specialization tends to limit your career prospects.
A year ago I was pretty much in the same boat and it's interesting when I look back at the things I wasn't so good at. Awareness of the technology you are using is an important one, many people have suggested reading books/blogs etc which are good.
One thing that may help you, is to look at the MCTS material, starting with a foundation exam (I'm working toward 70-536 .NET 2.0 Framework exam) to make sure you have a good base. One of the advantages of this is one that it is credited by Microsoft so you can add it to your CV for the future and it gives you a more structured approach than just reading books.
Secondly read up on design practises, or even design principles (such as Gang Of Four). Do your best to not cut corners, and develop your code in the best re-usable way. This keeps you thinking about design and maintainability which is extremely important.
Finally I'd probably suggest trying to ensure you're not doing the same thing over and over. Don't just work with databases, or UI's etc... Try to get a mixture of things to try new techniques and learn new stuff.
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.
How can I increase my proficiency in programming? I have a grasp of the basics of C#, but don't feel too confident about my ability.
Code something in C#
Read C# Code and try to understand it.
Read a C# Book (and please none of the C# in 21 Days books)
The confidence comes with the experience.
Read Stack Overflow every day :)
Seriously. Try to solve interesting problems. Even if you don't post your solution, come back later and see if other people came up with something similar, why their solution might be different, etc.
Project Euler.
http://www.asp.net/LEARN/videos/
Voile, you are programing ASP.net.
Keep in mind that you may need a little more grasp on C# as your codes evolve. For that use a good book, most Microsoft's learn C# are pretty neat(The learn ASP.net is quite lame).
Of course, thats what I did back then(about 2 years ago), nowadays you should be able to find some awesome tutorials online.
Good luck ;)
Think of a fun project of some complexity (more that "Hello, world") and code it.
Practice, practice, practice!
Also read forums, blogs, participate in discussions. You will learn many things that aren't even mentioned in books.
read lots of code, write lots of code and keep a copy of C# 3.0 in a nutshell handy.
Learn new programming languages. Learn data structures and algorithms and design patterns. Learn regular expressions. Learn databases. Learn HTML/XHTML/DOM. Learn learn learn learn learn.
In programming, knowledge === power.
Work on something, even if it's reinventing the wheel. You can read books, watch videos and listen to podcasts all day, but the real experience comes from actually building an application. Don't build an application that you know you can build - instead, create an application that is slightly out of your reach, then rinse and repeat.
The experience when you realize that you created a mess of spaghetti code that is unmaintainable cannot really be substituted, as this then really allows you to look into techniques to improve your code. Sure, feel free to read on MSDN about Events, Delegates and Lambdas, but reading about them in the moment you need them means that the knowledge really burns into your memory.
I try to have a rough knowledge about as many topics as possible, but that's usually rather shallow: I know that a technique exists and roughly what problem it solves, so that when I need it I can learn about it.
In my opinion, the only alternative to first-hand real world experience is even more first-hand real world experience.
http://www.appdev.com/csharp.asp
:)
You say you are learning ASP.NET and C#. Have you ever done any programming or web development? Because, if you have not, then you need to take a step back and learn the basics of HTML, CSS and get a grasp of how data is passed via HTTP between client and server. I would also strongly advise getting a grounding in basic SQL, because most serious web development will utilise databases at some point.
After that, some basic OOP (Object-orientated programming) theory would do you good. That way you have a good grounding in the subject-matter before diving into the coding.
For learning C# the I'd suggest a couple of good tutorials:
The C# Station Tutorial and Softsteel Solutions C# tutorial.
I also found the ASP.NET Quickstarts useful when I was learning ASP.NET - I prefer to learn by example than by theory.
As for confidence, I'm afraid that only comes via experience. Perhaps try answering a few questions here? Getting a few up-votes might just give you that boost. Good luck.
This fits in to catagory of answers you've received thus far, but review open source projects.
Understand how they work and maybe even why they were put together in a given way. Not only will it improve your ability to write C# but it will also improve your understanding of Software Engineering which is ultimately how you put a programming language -- C# or otherwise -- to good use.
Creating a Project that makes use of a lot of different technologies is a good way to grasp a 'big picture' view.
As an example, think of an n-tier application where you input a value into a very simple web page, this value being sent into a web service, and behind that WS a simple business layer that switches between readings into a table of a data base, then you return the value finishing the output in a postback of the initial web page. In my Personal opinion, every element of the layer is a simple one, but, making the whole system work without errors is good beginner's challenge, that way you could build a confidence in your skills, enabling you to undertake any other idea.
Well, that were my two cents. Good Luck!
There may be so many projects that u can make.choose the project that makes u.it's true take a project that you consider difficult for your level.
1) analyse your project
2) define the objective
find things that are necessary to achieve the objective
3)then derive an algorithm which clearly explains the workflow
4)then start woking
In my experience "Learn By Working" is a good idea.first grab the basics then start the work soon you'll learn step by step.never give up ,be a ceaseless crusader.
practise practise it's a only way of surviving as a programmer.
Being a best programmer requires a lot of patience,thinking skills,Attention,a thrist for knowledge.
Wise people always replace the fear of unkonwn with curiosity
Actively participate in programming (and non-programming) forums.
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 7 years ago.
Improve this question
I have a working prototype for a killer app implemented in C# for Windows Mobile. It needs to be packaged into a commodity and efficiently sold. Possibly also converted to a web-centric platform.
Now I'd like to assemble a community of seasoned, possibly semi-retired IT professionals. They should be willing to work for fun and free, with an eye to future profits. I realize not many people have the option to risk their time on something like this, but - hey - on a global scale there should be more than one.
I've googled variants of the above, but no dice. And I don't really see SourceForge et al as venues for recruiting, but more as the place where you MIGHT put your code base when the project is under way. I'm not well versed in Open Source, and I'm not sure I want to "open the kimono" on the source until there's been some modicum of vetting process (goes both ways, of course).
So, rephrasing the question: what is the best site for recruiting people to a project like this?
Honestly, you may want to go with a social networking site like LinkedIn.
Your best bet on a risky project like this is to work with people you already know, and who already know you. If there are some bonds of trust in place already, you'll have a vastly greater chance of success, and a lot fewer unexpected personnel problems. Extending this to a 2nd degree contact (someone who knows someone you know) is a good next step.
Only if you really have no other options should you start pulling in people you've got no prior connection with, unless a) you're famous, or b) you want to start paying them and go through a more intense vetting (hiring) process.
Posting here probably helps, too :)
I wouldn't work for free for anyone unless they were already a close friend. Too many ways to get screwed.
To write a commercial application asking others to contribute without getting paid - even if you would give them a profit later on - to me that looks difficult.
I think you'd be better off to release a first version, perhaps with some limits, of your software for instance on XDA-developers. If it gets popular, you will have many free beta-testers out there and probably a lot of "skinners" who would probably contribute free-of-charge for the grafical user-interface. At this stage, you will probably get to know other developers at XDA who could help out with some stuff. In the beginning you could ask for donations and if you get some, you know that you have a software that people would be prepared to pay for. Then later on you could release a "Professional version" with more features that you could charge for.
just my 2 cents
I'm not well versed in Open Source, and I'm not sure I want to "open the kimono" on the source until there's been some modicum of vetting process (goes both ways, of course).
The best open source projects tend to be the ones that are developed with the mindset that nobody else will ever join your project. Start out with something simple that you can code yourself and then start putting the word out once you have a decent prototype (and treat every user as a potential volunteer). You may also consider recruiting anybody already in your network (friends, coworkers, etc) as they'd theoretically be more apt to join such a project.
It will be pretty difficult for you to get someone to commit to a project with a promising but early codebase. It will be even more difficult for you to recruit people with no codebase and no money.
I'm speaking mostly about the open source world, but I'd imagine that this would apply to a small shareware app as well. With that said, I'd recommend giving producing open source software a read if you want to learn more about the open source process.
To expand on ceejayoz's answer:
Even if you're friends, it's a heckuva way to get screwed. Things get said, promised, and discussed over beer with friends. Later, when there's something to lose (codebase, cash, clients, options) suddenly people have different recollections about who was going to get what.
Even if it's your bestest buddy, write down the details of your agreement. The more complicated the agreement, the more necessary it is for each of you to have a lawyer look at it.
The potential problems multiply with strangers. One of my bosses was also general counsel and she once said "If you don't trust the person, it's impossible to write a contract that will ensure their compliance".
It sounds like you're a developer and that's what you want to continue doing. If that's the case, I would recommend a joint venture.
That is, partner with someone who has the marketing skills that you need to get your product out to a wide range of people.
As far as places to look for those types of people, I would start at jvnotifypro.com and branch out from there looking for other sites similar to it. I believe at that site they have a few posts that mention some of those other sites.
Depending on your marketing budget, you could also go the route of paying people to install your program, paying for leads, etc. There's a lot of ways to market a program and to get the best coverage you really have to think outside the box.
Oh, you can also submit software to the sites that support PAD - I think there's an app called AutoSubmitPro that will do this for you. That's a great way to get your software out there a bit so that people know about it.
I agree with Jason. The way I did it in the past was through my existing network augmenting my skill set. Hopefully, it takes off from there!
From my experience the best thing to do is come up with a sales pitch for the other people you want to join the project you will have to sell the idea to them the same way you would sell it to a customer, people have to believe in something if they are going to work for free.
Additionally if you expect a professional to work for free you are going to have to give them a stake in the company...how big a stake all depends on viability of the project and your negotiating skills.