4
$\begingroup$

So to elaborate I am what I consider an intermediate level software developer.

I have worked as a web-developer for 3-4 years. I worked mainly on front end projects before I started my current job as a software developer.

I have been at my present position for 4-5 years.

I make plugins for an engineering firm.

At this point, I have made and am actively maintaining about 40+ python repositories.

I have been tasked with creating a free-standing desktop tool for employees in the company to sign their work. Let us call it the signer project. The goal of the signer project is to better estimate the progress and time consumption of our projects.

On the signer project, I have done the following:

  • I created the data-base
  • created a Login.
  • created the record-Handler

For all intents and purposes, the project does what it is supposed to do. However, the project is not good.

  • It is slow
  • The user-interface (UI) freezes all the time
  • The user-interface (UI) does not update properly
  • I can't get the loading bar to show up.
  • I can't figure out multithreading for the life of me.

It is a barely functional mess.

I am clearly out of my league and need more training.

I'm working my masters degree but the program is severely outdated, purely theoretical and isn't teaching me anything new or significant.

I don't have mentors at work I'm the first and only programmer in the company.

I'm going through a million tutorials videos, documentation and textbooks and have made a lot of progress like that but the information is scattered and fragmented.

Is this really the best way to learn this? Are there any independent companies or training academies that could help?

$\endgroup$
3
  • $\begingroup$ Are you able and willing to switch jobs? $\endgroup$
    – njuffa
    Sep 2, 2023 at 20:56
  • $\begingroup$ While some relation exists between the two, the quality of the product you're building and your level of expertise as a developer are two very different metrics. A lot of the issues you're pointing out are frontend-related, rather than what I would call general-developer-skill related, so it might just be that you're trying to be too much of a jack of all trades, master of none. By my own biased judgement I am a strong backend engineer but even I have to admit that my frontend work often looks like I'm a first year student simply because I'm horrible with visual design. $\endgroup$
    – Flater
    Oct 16, 2023 at 23:42
  • $\begingroup$ @elizabeth What do you mean by "employees in the company sign their work." In the old days, people would sign legal agreements on a sheet of paper with a pen. Were you asked to create a computer programme so that people signed digital papers by using a computer mouse or other cursor/pointing device? $\endgroup$ Nov 4, 2023 at 0:53

4 Answers 4

3
$\begingroup$

But its a piece of shit. Its slow, the UI freezes all the time and doesn't update properly, [...]. its a barely functional mess.

This sounds like a highly typical, possibly above-average software product. Most apps are lucky to "do what they're supposed to", and if they do, then they probably cost 10 times more than the estimate or took 5 times longer than expected to build.

I'm [...] an intermediate level [...] software dev clearly out of my league

You're probably much better at software engineering than you think--you have almost a decade of professional experience across the full stack, plus Master's level theoretical knowledge and a clear drive to improve. Since you're in the job and have written the app, not to mention 40 plugins, you're probably in your league as much as anyone. You may have impostor syndrome (I do too).

If you haven't received serious direct negative feedback, your shortcomings may only be visible to yourself. If you have received negative feedback, you could ask the person giving feedback for actionable details and use that as a guide. Or, if it's just one person's opinion, they might be overly harsh. Some managers are tough even when their reports deliver above-average work.

I'm going through a million tutorials videos, documentation and textbooks and have made a lot of progress like that but the information is scattered and fragmented...

Yes, most information is cobbled together. Software and software engineers are imperfect--we're all pretty much hacking away at crumbling monoliths of garbage in various stages of decay, grafting on new features in an ad-hoc basis and ultimately having to throw it out or pass it on to the next unlucky team of engineers. Most documentation, tutorials and resources are narrow-perspective attempts at making sense of the mess, or pitch promising philosophies that fall apart when applied to real projects.

is this really the best way to learn this?

I'd say so. You're learning by experience, working on an actual product that has users. That's the best education you can ask for, at least for whatever skill set your job demands.

Are there any independent companies or training academies that could help?

Perhaps, but don't expect any silver bullets. I'd be wary of training academies and bootcamps. Most of the ones I've seen are fine, but as always, you get what you put in, and nothing is a one-stop-shop. There's a profit motive, instructors are overworked and some students cheat their way through, wasting their opportunities.

I provide 1:1 programming mentorship as a side gig and I think my clients are the type who benefit from personalized support, but improvement is usually slow and requires a good deal of time and effort. I've never been one to pursue mentors, and maybe this attitude has held me back a bit. Personalized mentorship may be better for you than group programs (I'm not advertising my services specifically here). In my experience, personal mentorship tends to force one to confront potentially uncomfortable skill gaps.

Once you're working on a product, the likelihood that training will be directly relevant to doing your immediate job is pretty unlikely, as you're probably experiencing in the Master's program. Facing the project head-on and engaging with your team, manager, reports, clients, customers and/or stakeholders, then pursuing whatever resources you need to deliver value to them seems like the best way to proceed, especially at this stage in your career.

$\endgroup$
0
2
$\begingroup$

When I'm reading what you're saying, there's something lacking: where are your tests? If you're not automatically testing complex software, it will inevitably become a mess. Tests are crucial for measuring the quality of the software and preventing regressions. If you're the sole developer in your company, this will provide you with a significant advantage. Once something is done, you'll never have to do it again. You might fix bugs and add features, but you'll have complete mastery over what your software does and does not do.

Start by rethinking the problem in its simplest terms: what is the core feature? Isolate it and thoroughly test it. I would even recommend rewriting the core feature using Test-Driven Development (TDD) or, at the very least, extensive unit testing. Once you're satisfied, integrate it back into the existing software. In some cases, you might find it more cost-effective and efficient to rewrite the entire existing codebase with proper tests, especially if it's a mess.

Threads are not as complicated as they may seem when you truly understand and test what they do. Whenever you're in doubt about their behavior, simply write a test to examine it. When you encounter a bug, create a test to reproduce it.

I highly recommend reading 'Clean Code,' which can greatly help in understanding how to properly structure your functions and code.

I understand that it can be challenging to find time to think and rewrite parts of the software when you're deep in dealing with bugs. However, when you're burdened with a substantial amount of technical debt, you're already losing time. The only way out is to take the challenging path and make the necessary changes to clean the foundations of your software.

$\endgroup$
1
$\begingroup$

There are a lot of different coding boot camps, but I cannot say which of the boot-camps actually teach anything useful.


I hope that you would ask the following questions:

  1. Is relocation required or can the training be done at home using a computer at home?

  2. if I have to sit in a chair inside of the same room as the trainer or instructor, what city, state, and country in the location of the training?

  3. How much money is it for the training programme out of my pocket?

  4. How much time will it take to complete the training? What is the job I would be doing when you are done training me.

  5. What job would be I be prepared for when you are done training me?


That is, we have the following key questions for coding boot-camps and training programmes:

  1. and 2. Where is it?

  2. How much money?

  3. How much time?

  4. What job would be I be prepared for when you are done training me?


I recommend look at existing spreadsheets, or making your own spreadsheet.

Someone made this spreadsheet.


Here is a different spreadsheet, which is mostly empty, but the column headers show what information I recommend that you take under consideration:

_ Where is
the
boot-camp?
How much
money
is the
boot-camp?
How much
time until
finish training?
What is the job?
App Academy
Flatiron School
Coding Dojo
Synergistic IT at home (no moving) $30,000 self-paced but avg 5 to 6 months ???
Design Lab

Here is bulleted list of the names of "universities" (?) or coding bootcamps.

  • Lambda
  • Thinkful
  • General Assembly
  • Codewords Software
  • Bloc Web Developer Track
  • Hack Reactor Bootcamp
  • Flatiron School Software Immersive
  • Full Stack Academy
  • CodeSmith
  • App Academy
  • Software Guild
  • Epicodus
  • Spring Board

None of these institutions is accredited.

Please be carful; some of these coding bootcamps are degree farms.

A degree farm is a business which will give you a diploma in return for money, but you do not actually learn anything useful while you are a student there.

$\endgroup$
0
$\begingroup$
  • Learn and use a revision control tool.
  • Learn and do test driven development.
  • Learn and almost always use functional programming (in all languages).
  • Do deliberate practice, with feedback: Do programming katas. Do the same one every day for a week.

Bonus: Do the structure and interpretation of computer programs course. A book is available, e-book and the lecture videos are freely available online.

$\endgroup$

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

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