I have one client right now who pays me out of pocket, but the work he's asking is beyond my understanding. It's dealing with a new system that has a lot of parts. It's well documented, but when I read the documentation, it's just not sinking in, I'm not "getting it". My eyes just gloss over and I re-read the same sentence over and over for 3 minutes without any progress. This is the same thing that happened when I tried to learn Rails about 8 years ago.<p>Is it possible to push past this and force my mind to learn new things? Is being 32 years old and in very poor health a show-stopper for learning new complex concepts?<p>My first thought is to just get another job, one that I already know how to do. But that's outside of my control, this is my only client and will be for a few months.<p>Any advice is appreciated.
I know you, I recognize your username. You wrote the tool for OSX: phoenix, hydra, mjolinr, etc. I think you are a very talented developer. I think you'll definitely be able to get a job in Chicago easily. There is no shortage of tech jobs.<p>If it is too much stress for you to work as a freelancer, just get a full time job. There is no shame in that!
<i>in very poor health</i><p>Do some care-taking first, then try to sit down and work.<p>Daily hot baths in the evening can help.<p>Upping the cleanliness of your abode can help.<p>Getting pickier about your diet with an eye towards good nutrition can help.<p>A daily walk can help.<p>Sometimes, coffee or another source of caffeine can help you concentrate.<p>Bonus: If you regularly work on your health, it can get better.
My guess — the kind of thought you need to “grok” that system (slow deep understanding) is unavailable to you when dealing with the kind of thought caused by your situational stressors (fight or flight survival).<p>Doesn’t mean you’re unable to learn new things. It means your cave-man brain doesn’t think learning system docs is as important as slaying predators and fortifying your cave.<p>Ironic, since the way out of the stressors is doing the one thing your brain doesn’t think will help. You have to get your subconscious to believe that. Tell it to yourself constantly, Thoreau prayer and ‘this too shall pass’ style, ‘meditate’ on the idea that you have a clear path to no stress because you have a developer’s mind, and by using that developer’s mind, you will slay the predators, fortify the cave, and protect your family.<p>Give yourself the permission to let the urgent stress go, so your subconscious can work on the important thoughts.
You are in burn out. It's not that you aren't intelligent or capable of the work, but it sounds like you just haven't clocked out in a long time.<p>You can fight burn out for a short period but you can't delay it forever. You resist burn out by working out hard, engaging in stimulating non-job work (eg a hobby) and engaging in intentional relaxation.<p>Ultimately you need to find a way to take time off.
I had a similar problem at one of my first jobs, I was given ownership of a few different highly complex and lightly documented codebases: sshd, kerberos, ntp, netsnmp, etc.<p>Other commenters are giving great advice around burn out, depression and health -- I'll leave that to them.<p>On the technical side, two things helped me with understanding complex code bases:<p>1. Write and draw on paper the object model, stack, protocol, interface, anything you can glean from the code or docs. Start small and keep adding to it. This helps you "chunk" the new information and have somewhere to attach new insights.<p>2. Run the system (or parts) in debug mode with maximum logging. Save the output and then start stepping through it line by line from the top. Find the source of each output in the code, try and understand the general area and then move to the next line. This will start to give you a good understanding of program flow.<p>Combined these two techniques will make it much easier to understand what is happening and when -- all you have left is to figure out why.
I'm 34, I've recently had to learn a ton of new stuff, some that I really didn't want to learn (asp.net? From the early 2000's? Yuck). Also lots of more complicated things - I'm flooded with information daily and it's a chore keeping up.<p>I almost always have the feelings you're experiencing in the beginning. The trick is to sidestep the mindfuck and keep trying. Ignore that dissonant feeling that comes with not understanding. In my experience, success is a function of grit more than anything else.<p>Also, a practical strategy that helps me to push through issues like this, is to get out a spiral notebook and a pen and to break the problem down into small chunks, and try to tackle those one at a time. If I'm really stuck, I'll write a list of all of my problems, with a space underneath. Then I'll think about the problem a little, and write a possible tactic to try for solving the problem. It sounds stupid but it really helps (I'm just applying the [Feynman Algorithm](<a href="http://wiki.c2.com/?FeynmanAlgorithm=" rel="nofollow">http://wiki.c2.com/?FeynmanAlgorithm=</a>) here).<p>Finally, 32 years is not old. You're just barely hitting your stride. I'm 34 and I've recently discovered that my experience is valuable, and gives me an edge over my younger peers. You're only as old as you feel. If you stop believing in yourself, it's a self-fulfilling prophecy.<p>Good Luck
It sounds like there is a financial aspect to what you are looking for help on so I would like to comment quickly on that.<p>You may have some options to adjust your debt/finances to lower your costs. If you do have credit card debt, there are services to consolidate them. If you have reliable income, even if it is freelance type work, you can use that to get a small business loan which could be less expensive then putting expenses on a credit card. If the income is not reliable try to make a deal with your client to make it a longer term contract. Guaranteed income is more value in the long run than big chunks of money at unknown times.<p>There are some things you might want to try to expand your current business:
If you feel like you have a working model for completing work, look for a business partner, whom you trust, to help turn that into more business. If you know your client well, think of other products or services you could provide them that would be valuable to them (that they would pay for) but would be less time consuming.<p>Right now, it sounds like your time and money are your most precious assets, but you have a wealth of knowledge and a working relationship with a client. Think of ways to exchange your knowledge and social capital (relationships) for more time and money for you.
The free coursera course "Learning How To Learn" really helped shape the way I learn and practice new coding concepts/languages/frameworks, etc. Here's a pretty good summary of it: <a href="https://medium.com/learn-love-code/learnings-from-learning-how-to-learn-19d149920dc4" rel="nofollow">https://medium.com/learn-love-code/learnings-from-learning-h...</a>
Barbara Oakley (from the course) also wrote a book called A Mind for Numbers if that's more of your style.
A tip from the book for your problem of "My eyes just gloss over and I re-read the same sentence..." would be to stop and break that sentence down into fragments, and understand each fragment before you try to comprehend the whole.
I would often just reread the same paragraph over and over, but that one little tip has really helped save me time and aided my comprehension of the subject.
i appreciate that it sounds like you're in a stressful situation in terms of your family's cash flow.<p>is it possible to switch your arrangement with your client to daily billing? in a way that doesn't leave you worse off financially, compared to what your average daily revenue is currently based on hourly billing. i dont have experience with pitching this to people who had previously agreed an hourly rate, but some of the other folks here might have suggestions for how to frame such a conversation so it comes across as a win for your client as well (focus on the output of your work rather than measuring your time inputs, maybe?).<p>if you can do so, it might make it easier for you to justify timeboxing some time every day for self-care and non work stuff rather than feeling the need to bill hours, and help you produce better work in the long run.
Honestly, I'm in a similar boat where I work constantly and gave alot of external stressors.<p>You're a knowledge worker. All the work you do...you do with your mind.<p>You NEED to separate from your distractions.<p>If you have more pressing needs that you can't get out of your mind it will be impossible to learn.<p>My suggestion is figuring out how to get your mind in a place where its 100% focused on your work and you are able to find that flow state where you tune everything out and can work and learn.<p>Things that help me are<p>1> Managing your real life like a project manager. Get the most stressful priority things finished as fast as possible. Or at least in a place where you understand and feel more in control.<p>2>Automate as much as possible(autopay bills etc.) In your life and outsource tasks to your family that they are capable of. You pay their bills they can chip in..<p>The goal of this step is to get rid as many trivial physical and external stressors so you can get your head focused on work.<p>2> Distraction free place to work. This is critical. Coffeeshop, coworking space, private home office....all it takes is a single distraction and your mind is out of the game.<p>3> Carve out large blocks of time where you can just...work. No appointments, no meetings, no interruptions...this may require scheduling meetings in the morning and working in the afternoon. Also, beware of friends and family..they will try to cut into this time...and it's very difficult to say no to people you love.<p>4> Do practice excercises in your mind and compare them to real world. I've found when Im having problems focusing on things it's because it's too abstract sometimes. And I have to bring it down to earth.
Like start run a chunk of code thru a function in your head and then run it on the computer to see if your mindmap is correct.
Like a poster in this thread said it's active learning which helps alot I think.<p>5>Physiological hacks: Some people say Yoga, antidepressants, nutrition, and/or excercise help. I typically dont practice a single one of those regularly but do notice I'm deff able to.focus more after I excercise. I think just getting your mind at peace is way more useful than Physiological hacks but these do help. Studies have shown that excercise is as efficacious as anti depressants. So take that however you want.<p>Anyway good luck sir.
There was a thread not so long ago about approaching large codebases. I think you might find some of the advice there useful: <a href="https://news.ycombinator.com/item?id=16299125" rel="nofollow">https://news.ycombinator.com/item?id=16299125</a>
I think you're just in a local bottom of the learning curve. Tell your customer you need time to understand his product. If he complains, say someone else than you would probably take more time.<p><a href="https://medium.com/trafficandcopy/the-learning-curve-is-killer-be-aware-of-it-31404ce0d398" rel="nofollow">https://medium.com/trafficandcopy/the-learning-curve-is-kill...</a>
First off, do not give up. This is a struggle for even the most experienced people when dealing with a sufficiently complex new system.<p>Try to focus on small, noticeable wins. Focus on a narrow part of the system that seems relevant, and try to start fiddling with and see what happens. If the system has tests, try going through them as it is often easier to understand how a system ought to behave than the details.
Try to write out difficult sections (pen & paper) to get started.<p>I've found that gives my brain the time it needs to get a handle on overly complex or boring texts.<p>Assume it's going to take you time so don't aim for completing too much the first few times. Don't worry about how much time it's taking, just worry about getting a couple of conceptual wedges in place. Follow pomodoro method.
Take care of your health separately but as a first priority. Take it easy and don’t put too much pressure on yourself.<p>See if you can get hands on with the system, preferably a staging/dev clone. Break it, try changing a feature, adding a feature, dig in anywhere that’s comfortable. Just reading docs even excellent ones isn’t always the most efficient path to grok a new system.
When dealing with a code base that has tests, I try to write a few of my own and run them successfully. No matter how trivial, at least it feels like more active learning than just reading.
I find that drawing pictures helps. (Especially if I use a tool like Libre Office draw, which lets me easily keep electronic copies.)<p>Good luck, I hope you find an answer that works for you.