Sign up ×
Programmers Stack Exchange is a question and answer site for professional programmers interested in conceptual questions about software development. It's 100% free.

Well, I always liked programming, but I've never been committed or tied to any real project. I learned some autoit, some c#, some html and css. Now I've been hired as apprentice as programmer by an IT firm and I find hard times to understand the whole thing.

They use a mix of C#, T-SQL, html, php, javascript, ASP and a lot of other things. I am missing the whole thing. I have to do C# programs that connects databases and synchronize data between them. But there is always some kind of problem with that effin SQL. They use SQL management studio to put up their servers and that buggy piece of "software" by microsoft has 10212020 options, problems, dynamics and so on.

EXAMPLE: I'll highlight in bold every technology or object I needed to link togheter or Had to/Hadn't to get togheter

But the most frustrating thing is that I don't know enough. Every technology has tons of other ways to interface with others and to be configured and they expect me to know it. For example last week they expected me to know how to use C# to make a Http webrequest to consume a wsdl webservice with soap to get in response a long XML string which contained some orders made by another firm. Then I had to parse that string in DataTables and Datasets using LINQ because it's faster and "easier" (NO) than XmlReaders with Xpath. After that I had to make Stored Procedures in T-SQL to elaborate those orders and avoid duplicates after loading them into the database with various SqlCommand, SqlConnection, DataAdapters, Connection strings and so on.

And every time it's something like this. For doing something you have to know how to use multiple technologies and become crazy because they have to set up 1000 settings or you'll get some weird Exception (Encoding, Comparing settings, blah blah blah).

It seems too wide and too big for me. I don't know If I can do it. Until today, by documenting myself I managed to do the job in some way or with the help of workmates (and I'm thankful to them for teaching me). But there is just too much to know. A project can become big in a few minutes.

In 1 month and half I had to mix what I already knew and get documented about:

-Hardware specifics -Hardware settings -Hardware pieces of all kinds -All kind of sql weird behaviours, best pratices,strange settings -C# weird casting rules -C# thousands of objects you must use to accomplish even the simplest task -html -Weird and less used languages like Zebra language or Arduino (which is C-like) -Old and new technologies, like serial ports, MAC/linux systems (always been on windows), iOS 7 -A good way to interface different technologies (see the examle I made before, If it was for me, I would have done in a whole different way...)

and the list could keep going for a long time, because I had to learn just too much. It's right for a programmer to have to know all of this? I think it's just too much for me or I'm just too stupid for it... I'm thinking to get another job, this is becoming too much of a stress and it seems to me that I'll never get "the whole design of the thing", meaning a clear idea of what I'm using or doing.

What do you think? Have you felt the same way? Should I keep going? I feel sorry and ashamed I had to rely many times on my workmates or to have to google for everything...

share|improve this question

closed as not a real question by Telastyn, BЈовић, Jonathan Khoo, Kilian Foth, GlenH7 Jun 23 '13 at 12:40

It's difficult to tell what is being asked here. This question is ambiguous, vague, incomplete, overly broad, or rhetorical and cannot be reasonably answered in its current form. For help clarifying this question so that it can be reopened, visit the help center.If this question can be reworded to fit the rules in the help center, please edit the question.

5 Answers 5

Dude, You're Killing Me!

What you described hits home with every experienced programmer out there.

  • Just when you think you have something under control... Wham! something new happens. Somebody wants something slightly different and just different enough that it causes a 65% rewrite.
  • Just when you get things automated and running smooth... Wham! a server crashes.
  • Just when you figure out how to master a specific language and have amassed a code library capable of handling any situation... Wham! you are required to learn a new language to support a new product line.

The list of "Just when... Wham!" goes on and on and on. Believe me it's coming, it's part of the business of being a programmer. Learn to embrace these moments.

  • Be the one who relishes in the new ideas.
  • Be the one who embraces these challenges.
  • Be the one who puts forth a solution while everyone else is moaning and groaning.
share|improve this answer
This comes from a better attitude than my answer. Also, if you get really good at a specialty, learn to relish being wrong because that is the best thing that can happen to you when you're right most of the time. – Erik Reppen Jun 23 '13 at 7:02
@Erik - If I had answered this question 6 years ago I would have gone on a huge tirade. I was truely burned out at my last job (senior database & web developer). It's very hard when you are in the middle of a $#!& storm on a daily basis. See this P.SE post – Michael Riley - AKA Gunny Jun 26 '13 at 12:05

You always have to learn new stuff. Welcome to programming. It can seem a little overwhelming at times to a jr. dev and for some - anybody who thought the learning part was over at college graduation - it's a lousy choice for a career. I'd recommend sticking with it for a year. But if you don't really enjoy any of it in the first place and went with the best years of education to pay ratio, you're in for a shock. The hourly rate stinks because we have to stay up on technology. It only doesn't stink when we're interested enough that the self-education feels more like a hobby than work. Picking up new stuff as you go is itself a skill you're going to have to hone and appreciate in order to compete. And if you're a .NET web developer you need to know all that stuff you mentioned. I'm primarily a JavaScript/UI dev and have touched on most of it.

Additional: But you know what? I may have been a touch quick to judge. That is in fact a lot of stuff if you're starting at a level of just knowing how to code. If your situation is well-understood, don't be afraid to admit ignorance. Ask for a hand where needed. Most devs (I hope) live to solve problems and would be happy to help you out. It takes a while to pick up on everything especially in web dev where there's a lot to know and it's easy to specialize excessively.

My advice would be to really take anything you don't understand that well and write it down for reference so you can study later. What you'll most likely be surprised to find is that it's usually simpler than you would think. All these acronyms in the want ads and things people talk about in hushed serious tones, are usually not that big of a deal if you're even a halfway decent programmer. And it's okay to not fully get a thing a right away. Just keep coming back to it and eventually you'll know enough to have an opinion on it that's valuable to somebody.

share|improve this answer

What do you think?

I think this is completely reasonable and a typical development environment.

Yes, you have to know a lot of various technologies. Professional software development is complex. They wouldn't pay you to do it if anyone could.

As a beginner, or even as a new person to a company, you're expected to ask a lot of questions. As a human being, let along a professional or a programmer, you're expected to have to google a lot of stuff. If anything, people retain less and less data because it's so readily available elsewhere. No shame in that.

share|improve this answer
Yeah, but, you know, you can't just completely study wsdl, soap, js. You just have to read quicly on google what you need and do your job. It feels like you just google your solution and don't learn anything "complete" about what you're doing. You just find libraries or something that do it for you and (taking in example wdsl) you know its name and what it does in your specific case. But if someone asks you some informations about it you don't know because you hadn't the time to get well documented about it. – Liquid Core Jun 23 '13 at 1:46
@user2212907 - nobody knows anything completely, and the choice is yours and yours alone to search only for your solution rather than learning the broader technology. – Telastyn Jun 23 '13 at 1:57
Well, I think one should at least have a good knowledge of the technologies he's using, but they're too much – Liquid Core Jun 23 '13 at 2:58
@user2212907: no, once you get a little farther into development, provided you take the time to learning the broader technology, you will start to notice all the similarities. Picking up new stuff will go faster and faster because you will recognize the similarities and just hunt for the differences. – Marjan Venema Jun 23 '13 at 10:52
I hope so, I guess it will take years to do that. Thanks for the support :P – Liquid Core Jun 23 '13 at 13:29

That certainly is a very broad spectrum of technologies that you are using, particularly for a junior developer who is less than 2 months into their career. I have three pieces of advice:

  1. Embrace the fact that you don't know anything.
  2. Break down your pieces of work into small tasks.
  3. Ask questions, lots of questions.

Ok so #1 was a little tongue in cheek but the sentiment is true - you are a junior developer with no formal teaching, there is absolutely loads for you to learn. This is totally fine and normal. I completed a Computer Science degree with a large emphasis on Java programming, took a job straight out of university and felt like I knew nothing. It took me quite a few months to be useful. The biggest factor was that this was the real-world and I wasn't writing a program that was 100 lines of code from scratch but there was also the aspect of learning the company framework, SQL, server side work, etc, etc.

For the second point, breaking your work down into small tasks makes the whole problem feel much more manageable and achievable. Your task is no longer "write a module that will accept an order from company X, integrate it into our order system and then produce an invoice which is emailed to the customer" (which can be completely overwhelming) it becomes:

  1. Accept order from company.
    1. Create a web service to accept a connection.
    2. Parse the XML.
    3. Create an Order entity.

and so on and so forth. You can make it even more fine grained if you like. Step 1.1 could have another 5 points, including "Google how to create a webservice"! This is something I try to drill into our new developers and it really helps them. All of a sudden you can start crossing tasks off your list and feel a sense of achievement. It's amazing how much this improves your productivity and mood. Even if you haven't finished the overall piece of work by the end of the day, you can have 10 or so things crossed off which is a really nice feeling to go home with.

Hopefully you have some people around you who you can ask for help. Given that your job title (seems to be) junior developer that implies that there are more experienced developers who will all have been in your position before (not necessarily at the same company but in their career). These people should be willing to help you and you should be making them help you by asking questions. Depending on your company culture you may be expected to do some research first (Google) before asking for help or you may not. If this isn't clear then approach your colleagues and ask them what the process is for getting help from them.

I wish I could go back in time and tell myself this just after I graduated because it would definitely have helped me be more productive, learn more (and quickly) and feel less useless than I did for the first few months.

Lastly, good luck! We need people like yourself who have an interest in software development. The fact you have taught yourself various programming languages and are self-aware enough to post here is a credit to you - you'll do very well in my opinion.

share|improve this answer

Have I felt the same way? Sure, I expect everyone has. The real difference is how do you react when faced with something you don't know? Do you figure it out, or do you shut down?

If it's the former (and it sounds like it is), then yes - you should keep going, at some point, the connections will hit and come together in your head. At that point, learning "new" things that are a variation of "old" things will become a syntax adjustment - not learning a new concept. Very occasionally, you'll need to learn a new concept - but honestly, it's pretty rare (personally, once quantum computers become mainstream I expect I'll be taking early retirement).

The specific list of items you have listed (HW settings, iOS, Arduino, C#, T-SQL, etc.) are a little broad. Very few developers are proficient in those, since they're disparate segments (embedded, mobile, Windows). At best, a generalist would be expected to be able to learn those (and by learn, I mainly mean Google) as needed and do kind of a crappy job. Everybody is a specialist to some degree - at some point, through conscious decision or happenstance, you'll have to pick yours. Again, you should strive to be able to learn new technologies - but there's no expectation that you already know them.

I'm mainly a Microsoft web guy. In that role, I'd expect proficiency in C#, SQL, HTML, CSS and JavaScript. If you're an expert in one or two of those areas, that's pretty good - I don't personally know anyone that's an expert in all of them. That said, I've dabbled in other areas (and have left a few other technologies behind) - and feel confident I could become productive in them - but I would expect finding an actual job in eg., an iOS shop would be difficult for me (and would come at a significant pay cut).

The most important skill you can learn right now is the art of just in time learning. Basically, being able to quickly discern which of those Google hits (and these StackExcange answers) to lend credence to, and how to quickly use them to solve your problem. During downtime (and, yes, that includes weekends) read up on some of those things that interested you during the week to learn more. As long as you continue to find things that interest you, you'll be an excellent developer.

share|improve this answer
Well, thanks. The last paragraph it's exactly what I am doing atm. Damn, that will be hard to do for months eheh. – Liquid Core Jun 23 '13 at 13:32

Not the answer you're looking for? Browse other questions tagged or ask your own question.