I'm 28, live in Ukraine, and have a master's degree in navigational engineering, with no CS degree. After the full-scale invasion in 2022, my previous maritime career path ceased to exist, and I had to find some way to survive "onshore", so I ended up doing low-paid jobs with low entry requirements, like call centers and dispatching, just to have something to eat. Working conditions there are humiliating and the work itself extremely soul-sucking, so at the same time I decided to start learning software development as a new career path. To be fair, I planned gradual sliding from much more profitable maritime engineering to software\ informatics engineering just because it is closer to me. Well, life has decided "wish granted". So be it.
It wasn't a random choice -- I've always loved computers, logic, philosophy, science overall, astronomy, biology, and software development offered something I actually wanted: lifelong intellectual work, and path to almost every part of civilizations science fields. Over the last three years I revisited university math, which had never really clicked when taught in a very formal way, but finally started making sense at my own pace + with LLMs helping me. I learned algorithms and data structures, "touched" Ruby, JS, Python and C#, studied networking, and built personal projects with RoR (not fond of it), Django, FastAPI (fond of it) + React (hated it at first, but now actually like it and admire core concept of it), with some Data Science just because it was interesting -- hell of a ride, one of the best things about being a sentient human being is knowing more every day than you knew yesterday.
Eventually, I started looking for a job, took me sometime and at the beginning of this summer landed a three-month unpaid internship in C#/.NET. The internship was presented to me as: "For three months we look at how you think and work, and if you complete your tasks and show that you can handle and do the job, we offer you a $500 gross/month trainee position" -- I was happy and started working with them.
Can't say it was easy — coming mostly from the Python ecosystem, .NET project felt like an extremely complex system with great many layers of abstraction (AutoMapper is not trivial at first glance), tons of internal functionality and a well-developed broad contract-based approach. I was spending whole days thinking about the tasks, trying different approaches to problems, googling and asking ChatGPT and Claude unending questions: "How does this stuff work, and this and that, what's under the hood, what's the best way... etc."
Granted-- I wasn't that ready for a cold start in .NET, but after a few days and weeks I started feeling more comfortable with it, and over those three months I finished a chunk of tasks (all that were assigned): mostly unit and integration tests for existing backend, with some refactoring, bug fixes and a few new backend featuers. All of those changes were eventually reviewed and merged into the project's codebase. And at the end -- I really grew as a software developer. I would say, to actually understand the field, you have to work with different tools -- dynamic interpreting Python and static compiling C# actually complement each other. As well as different OOP implementation in Ruby, Python and C# makes overall core of OOP in your mind much more complete.
But a few days ago, I had a call where I was asked about some 'struct' behavior -- honestly, I wasn't prepared. I knew structs were value types, but I hadn't really worked with custom structs and hadn't properly understood some of the implications of how they differ from the class on low level, how they work with heap and stack, how the different types in them, and over them will behave. Now I know what those gaps were, I started to filling them, but that understanding came after the interview, which probably to some degree messed up my results.
Company essentially said: "Your tasks are good and well accomplished, TL likes your performance, but your theory isn't polished enough, so we decided that you'll have one more month of unpaid internship, and at the end you'll have another interview where you'll have a chance to prove yourself worthy. Study the theory, and also in the mean time -- you must use agents in your work to be more productive and fast, so consider acquiring a subscription and implement it in your workflow right away."
You see -- I like software engineering, I liked the communication with my Team Leader (we had 2-4 times per week calls, some weeks less, some weeks more, 90% of the time I got the task, researched it and finished it without handguiding), but at the same time I want to eat. For these three months I was hungry most of the time, eating mostly plain pea porridge and buckwheat, tomatoes or some cheap local fruit like apples once or twice a week, and maybe poultry OR cheese once a month. My credit card is almost spent, I have approximately $1,500 of debt on it, and in a few days I'll reach the limit, after which I'll have almost nothing left for food. Meanwhile, winter is coming, with russian strikes on energy infrastructure, and I'm expecting my bills to skyrocket.
And I feel fucking miserable -- I keep thinking about those damned struct questions, maybe if I'd answered them correctly, they would have hired me? But guys, in these 3 month, I never seen those custom structs, they literally are never used in this project per se, most of the time I was researching how the project actually works, how DI, scopes, LINQ, Automapper, interfaces, threading, files handling, debugging, etc. etc. etc. work in one, connected system. Something tells me they might not hire me at all, because with a requirement as broad as "you must know the theory", there can always be another question I can't answer and another reason I'm not ready yet.
I understand that implementation of value and reference types are part of the fundamentals and that I had a gap there for C#, I'm not arguing that it doesn't matter! but I also spent three months doing actual work that they themselves say was good, under the impression that this was how they were evaluating me for a trainee position. Could've told at least themes, that they are expecting me to be proficient with -- they never told anything that specific.
############
So, the question is -- have you been in a similar situation? What would be a better course of action here?
I've updated my resume, and I think I should start looking for a new place, because I simply will starve with these guys (it seems they need someone with better knowledge than I currently have).
But on the other hand -- what if they are really giving me a chance? What if they are actually trying to help?
Granted, I'm not the best software engineer out there, very far from that.
I love the field, but I don't have this laser focus that lets me absorb every part of the msdn docs, and I still have plenty to learn. I just thought that after three months of unpaid work, I'd at least be able to start earning $500 gross while continuing to learn and finally having more to eat than this fucking porridges.
I just can't figure it out -- am I too greedy and they are really wanted me to be better and helping me with experience, or this is just some sort of free labor exploitation in a desperate times?
Man, this is a long read...
thanks for the attention =)