I'm a persistent hardhead (I'll try again and again, until I succeed!), natural saver, proactive, challenge lover, bug hunter, dad of two boys (
I don't think I've contributed much to open-source, but it was enough to make "jonas raoni" and "jsfromhell" bring respectively +26K and +35K records just in GitHub, probably due to my old project http://jsfromhell.com (online for historic purposes). These little pieces of text have the power to transcend my own existence
At this moment I'm moving into Node and React.
How I Code/Solve Problems
I'm a practical person, who doesn't like slow, long and repetitive things, so I naturally try to be concise and short in my codes, I also try to write things as performatic as possible. Since I like small challenges, I've started solving the tasks below in my micro spare time:
General Beliefs/Rants About Programming
Personal rule of thumb: Every now and then we're surrounded by new ideas and technologies, which means that everything we're building is already a kind of legacy, which will be dumped (errr transformed) a couple of years ahead.
I think it's part of our job to make the transition easier, by minimizing the amount of code, complex architectures and customizations to the minimum. Choosing long-standing libraries and avoiding being an early-adopter of tools/frameworks might be helpful.
Code fragmentation: The less code the better! Naturally the same applies to the number of files, classes, tools, services, etc.
I guess that everybody agrees simple and small functions/classes (implicitly fragmented across several files) are easier to test, reuse, understand and less likely to be broken. But debugging/reading such code full of indirections highly increases my cognitive load, I feel like reading a book where each paragraph sends me to a random page, with no context, and switching between these pages is painful (unless I'm the creator
This way I generally prefer to avoid fragmenting the code/creating too many abstractions... Basically, I think that a god method/class is horrible, but the inverse is not less cruel.
Micro-optimizations: My favourite stuff! But it's not fruitful to spend time nitpicking (micro-optimizations) and sharpening your knife (overengineering) for a war that may never come, better to spend some time on macro-optimizations using a profiler ¯\(ツ)/¯
Code complexity: Everything in life needs equilibrium, especially when a piece of code becomes so complex, that even its creator can't fully understand it without reading the code throughly. As there's no specific rule here (what is simple for you, might be complex for another), I think it's enough to just align the complexity with your team, always giving preference to the simplicity.
Dependencies: I'm against depending too much on specific features from closed source products/vendors, everything should be replaceable. On the other hand, I fully support using popular open-source projects, as you get support, documentation, testers and upgrades for free.
After having some experience modernizing large legacy code bases, I'd say it's much better to use ready packages than hand-made code, even if you can do a better job.
p.s.: I'm still trying to swallow micro-dependencies (hello
node_modules), but well, as long as it saves you some lines of code, it should be ok...
Slow vs fast languages: I enjoy using the fastest language available, but in the end processing speed is overrated. For general applications, what really matter is having an effective data transfer/structure, as the key to performance is avoiding/delaying/throttling the resource usage.
Coding patterns: I see coding as a kind of art, so I'm not a big fan of materials spitting coding rules. Some people end up using those as a kind of "horse eye patch", which limits their alternatives, while the truth is that a problem might have N different (and equally great) solutions. But yeah, things are easier when everybody speaks the same language :)
Reinventing the wheel: Traditional jobs, require standard approaches. Despite that, I think reinventing the wheel is the best way to evolve something, it gives us freedom to filter out bad decisions and merge in the good ones, that's how disruptive tools/approaches are born.
Hiring in IT: We're often looking for our clone. Someone that thinks and knows the same things as us, and in this process a lot of great professionals are lost... And I think it's not possible to fix it.
Big companies can afford to add more people/steps into the hiring process, to make it less biased (but more stressful for the interviewee), or to raise the bar with complex requirements, to ensure they are hiring an exceptional brain (hopefully they are not grabbing bazookas to kill ants, that's bad for the society).
For smaller companies I'd follow these priorities: indication from someone I trust > previous experiences/personal projects AND/OR offline coding/implementation test (not huge, but complex enough to allow the person to show his organization, reasoning and resource management skills) > soft-skills.
- I've been working remotely since 2015, and I fully recommend it.
- I got my first computer when I was around 10 years old, a 486-DX2. I've learned how to use it by spying my cousin giving classes about DOS (not DoS
👀), so I still remember something about:
winto start the Windows 3.11, turbo button, sound blaster kit, cleaning the mouse ball, zipdrive, SCSI (the super fast disk that nobody had
- I've got access to the computer after finding the key (yeah, computers had locks) and discovering the password (which was errrrr "password" in my language
- I've joined the internet after listening to some guys discussing about it and HTML in the classroom when I was ~14... I've got curious and once I arrived at home, I found an AOL CD and installed it, but well, it required a modem... Hopefully I remembered my cousin was talking about this device, when he was setting up a Dial-Up connection to play Duke Nukem online againt my other cousin (a real WTF at the time and, I still don't know from where he took all this knowledge haha)... So I found a great 13.4 Kbps modem in a box with old hardware pieces, cut some cables and it just worked! I still remember about using the internet at night to save money, losing the connection when someone was calling and the introduction of "download resumers" was awesome
- I still feel proud about my old codes, since I've created a binary parser (which was used by the MongoDB Driver, exactly here: https://github.com/mongodb/node-mongodb-native/blob/c9a7b9050d54794d0f515e10f3c4d3556f9f6cbf/lib/mongodb/bson/binary_parser.js#L1), a big number library and other things in JS, some years before they were introduced to the language, it's cool when you get random (as I totally didn't need these things) ideas and make them work =]
- Given that frontend has changed a lot these days, I don't have a specific preference to work in the backend/frontend anymore (it used to be the backend).
- I took part into the contest where the creator of JQuery (John Resig) was starting to become popular haha (our entry is the number #2, John's entry is #3).
- I've won a video game championship when I was a child (and others at my working place). The older guys (which lost for me by scores of 10x0), were praising me as a god
- My first paid task was converting handwritten monographies to Word when I was around 13. I have nothing to complain, any amount of money is a treasure for a teenager haha.
- My favorite type of task is improving performance and diving into weird bugs.
- My first home page is still accessible through the https://archive.org, but I'll never reveal its address! Some close friends must still remember about it
- I've got my first programming job around 2001, a kind of freelance job to work on the integration of a machine to test the cushioning system of cars using Object Pascal/Delphi (I didn't receive my last paycheck
- I've been once a victim of a kind of social engineering attack... When I was 16, a friend of mine asked me to take a look on a game that he made and it had a hidden keylogger haha (that day I realized how ineffective antivirus were against unknown threats haha)... Hopefully he warned me later! These days I was looking for him in internet and looks like he became famous for earning prizes in online promotions, such as a CAR haha... I have a small guess about how he got the prizes
- I've been once a victim of a ransomware as well! Someone connected to my MySQL database years ago and renamed the databases to form a message asking for money (after that I've finally became a bit psycho with security)
- My favorite PC games were Euro Fighter 2000 (a flight simulator), Full Throttle, Indiana Jones, Quake, Duke Nukem and Warcraft, countless hours spent on them... The most revolutionary one was Carmageddon, my family was just shocked! Then it came a lot of trash games + the infinite Battlefield/Counter-Strike (I was the AK guy) seasons, which were then replaced by eternal (successful, but full of hatred against the game's AI) FIFA seasons, until I got retired from games
- I don't trust in the current state of crypto currency, but digital money is here to stay (I can't remember last time I've touched bills/coins)... Also descentralization in general sounds great given our failed leaderships.
First Open Source Projects
Just small codes and notes which I thought wasn't worth to create a repository.