Ask HN: Should I get mentored by this guy?
pastebin.com
pastebin.com
A few examples:
X says that we should be using "special character" separated strings - without using a lib/wrapper that hides the underlying implementation.
Why does he think that way? Has he tried going down a JSON route before, only to be confronted with an edge case or peculiarity that makes his method simpler?
And this part jumped out to me:
For example, I say - Let's put in 10 more days and make a generic solution to create similar forms for 30 db-tables ... (time is not a problem)
Ten days is a lot of time. Can you put together an argument that the generic solution is worth that time even in the very long run? You say time is not a problem, but how is that possibly the case?
I was actually about to comment on the same thing. Depending on the case a simple solution would be faster to implement and potentially easier to maintain, but as always it will depend on the requirements
JSON: go with the more standard JSON, "special delimiters" sounds brittle --> old fart loses
customers: don't solve their problem unless they paid for it or it's very small (<1hr). If it's a good customer they'll understand, bad customer will ask for more and more --> old fart wins
functionality: restrict if it's a headache to support unless it's something everyone else has already has --> tie, old fart and young gun should discuss it
genericness: big warning sign! In my first few years I was always building frameworks, now I solve problems. When the time comes to build a framework you'll know it but it takes many years to develop that wisdom --> old fart wins
To make matters a little harder the old fart seems to naturally have encyclopedic knowledge or was forced to develop it in a day and age of printed manuals (I remember those days and am glad they are gone!) The current generation of programmers has less need for rote memorization but keep in mind that there's some value in encyclopedic knowledge beyond the pure facts. If you know a lot of stuff without having to look it up your brain also becomes better at algorithmic thinking because you have more data to practice on. Sadly, my own memory has never been so great.
nah. depends on context. given a large existing codebase that already has effective communication implemented via special delimiters, recreating that same functionality in JSON really does not make much sense.
....sad though it is to say...
import 'csv'As far as facts, if you know a lot of facts, you can reason about how changing one fact (eg, "we write this value to this SQL table here, and we are going to stop doing it") allows you to reason about how other facts are affected ("Modules X and Y expect that data to be there").
I wasn't clear on that example. If he's talking about CSV, there's nothing wrong with that (though I wouldn't call JSON "bad"). If he's talking about delimiting text with the bell character, yeah, that's ghastly.
> without context
I feel like most of the examples don't have enough context to make a fair judgement.
If it's just a small amount in one place, simple formats like CSV and JSON can easily be parsed, and especially generated, manually. If they're used all over the codebase, manual parsing would create a huge amount of duplicated code. There just isn't enough context.
You know it, but how do you know the old fart in the article knows it?
I think the question being asked is whether the old fart has wisdom, or is just a mediocre/bad developer who's been around a while.
I think the point of the examples, was to provide context for people to help the asker determine the answer.
tldr, You address the specific examples well, but I think maybe you haven't answered the real question.
From the link: >"6-7 years higher than mine"
Gee.. since when only 6-7 years more experience than a presumably junior engineer is considered to be an old fart?
That makes me feel really old right now :(
A practical generic solution, for example, that takes an extra 10 days to do, sounds fantastic from an engineering perspective-- we're trained to think this way. But on the business side of things, you may have a timeline for a feature to nab a client, or not enough budget for those extra 10 days, etc.
My opinion on these matters now generally falls into the it depends camp. Take his mentorship, because it sounds like he understands that every engineering solution is accompanied by a business solution and they must be agreeable for both parties (that said, he does seem a little jaded, so you don't have to take absolutely everything he says to heart-- there are companies who will give less weight to the business side of things, but the reality is that the consideration will always exist).
This cannot be stressed enough. Replace "business" with X. Engineering is rarely isolated. More often than not, constraints on time, budget, usability, customer relations, etc... are just as important as the down-and-dirty engineering constraints themselves.
This applies to all engineering. It is much more obvious, in some fields than others, though. E.g. material costs are easy to perform a cost/benefit analysis on, whereas software is generally more abstract.
One of the big things that made me think about it like that was his stance on generic code. As in my experience it tends to lead to over-engineering, and less efficient code (as you need to account for more things).
It's takes some experience to know when the extra effort is worth the time; and it sounds like Mr. X very well slanted towards practicality ... throwing a little idealism at him where you think it's needed... AFTER you understand his reasoning... will make both him, and you better at the end of the day.
EDIT: Rereading that it sounds a bit harsh ... it's perfectly fine to abuse a language when you're communicating with your friends (some friends anyway). As an architect, you've also got to communicate with management. Practice by playing some buzzword bingo, then write coherent and grammatically correct sentences using those words. You may in fact be smarter than this architect, but you have to convince everyone else too. (Actions speak louder than words, but also choose your words carefully).
Learn from him, sure. Maybe that means learning what not to do. But "mentor" isn't the word you're looking for here, I don't think.
If you really think you can't learn anything from him, probably he is the right person, you have a lot to learn.
EDIT: 6-7 years older... heh.
You need to understand more than just the art of software engineering, you also need to understand the business, the customers, the stakeholders, the roadmaps, and generally the reason why things are moving in particular direction. Your mentor should be sharing as much as they know on these topics instead of just mandating implementation details without describing why.
On stuff like JSON vs. custom delimiters, that's old thinking - you can probably win that argument by finding out exactly why he thinks that way. Chances are that he's concerned about bandwidth overhead or something similar, or he's thinking about the effort of implementing it from scratch. You can argue against the former by doing some tests with your webserver's mod_gzip, and the latter by coding up a POC with a JSON library and showing him how easy it was.
Being mentored doesn't imply that you have to take everything they say as gold. Approaching their advice with a critical but respectful attitude is probably best.
A lot of the rest of it sounds like simple pragmatism and YAGNI which is something many young and brilliant developers need to learn. That said, if he lets copy and paste code multiply and not be refactored and relies on his perfect memory of the codebase to update multiple places then that could be a red flag.
Anyway, if he has the patience so explain the reasoning to you and gives you some war stories I think you'll come out better for having listened.
* It's never free. Do you have tests for this? + it will restrict your way you can refactor the code.
* Product features are not always good, product complexity is actually a bad thing and it is unlikely that you don't increase it.
That said, it will make some users happy, so it may be worth it - all I'm saying is that this should be a conscious decision, it isn't a no-brainer.
Mentors are human, they are far from perfect.
It maybe a good idea to get a Mentor for different aspects of your life. Pick and choose the talents/qualities you want to emulate, don't just copy and paste their actions and beliefs.
The copy/paste would be a warning sign to me, but it could also be that he knows a generic solution would become extremely complex with problems that you do not yet have the experience to forsee. It's not really possible to understand which is true based on your email.
Anyway, I would try to get more information from him to see if he is being lazy or pragmatic. When he says thing that you disagree with - have him explain it to you. It might be that he has very good reasons - or that he is just resisting new technology that he doesn't understand. I would try to find that out first.
All that being said - you can learn a lot from a bad situation as well as a good one. You can learn what not to do!
In my opinion it's important to keep one's idealism and practicality balanced. For instance: solving the company's problems first and letting the customer solves their own strikes me as both practical and reasonable. Opening one's mouth and recommending that code be literally cut-and-pasted repeatedly may sound practical, but in practice I've learned that's rarely the case.
I think the perfect mentor is nearly impossible to find. I believe that I've been well served by reporting to a variety of different personalities and striving to emulate those things that, as far as I could tell, where helping them succeed. That's a bit of a punt, but I don't think there's an easy answer here.
I also think you should bring a couple things to the table that you want to teach him. It could be some new fancy tech, or some online community or something that will help expand his perspective and better understand where you are coming from.
At the end of the day, it is really relationship problems that hold us back - not technology problems. And your ability to form successful mentor/mentee relationships will help you much more in the future than learning new tech of the week. (It will also give you perspective when your future mentee posts to hacker news v.next about her stodgy old mentor that doesn't know anything ;)
Assuming his approach is indeed better than yours, what I'd be worried about is that he hasn't explained to you why his approach is better (or you weren't listening). A good mentor needs to not only be able to do things the "right way" but also articulate in an easy to digest manner what makes it the right way.
You need to express your desire to learn from him and ask him to explain why his approach is better. If he can do that well, then he'll be a good mentor for you. If not, then not.
Kidding aside... I think by posting this you already had your answer.
Sometimes you'll be right, the clouds will part and you will feel the warmth of the sun on your face. Other times you'll be wrong and will humbly think "mentor was right that time".
But, at the end of the day its your name attached to those lines of code, its your career, and your life. Survive by your own cunning.
And, while we're doling out life advice- I strongly suggest standing up often.
I've learnt 2 lessons: I'm not always right and you can agree to disagree. Ask questions such as "How did you reach that decision?". If they can't convince you, calmly give your reasoning behind your decision. Worst comes to worst, agree to disagree and let your line manager make a call. Go with it and learn.
Learn, but be yourself, at the same time.
That said, you can learn from almost anyone - talk to him a lot about the reasons why he makes decisions, not the decisions he makes.
I don't think we have enough information to decide who's right in any of the OP's situations.
You need to be a lot leaner and then make things more ideal when the code-base freezes: which is never.
For example, with JSON is nice if you're sharing data with others. But parsing anything can be done in half a minute by hand.
Likewise, if you start making changes that should be on the buyer's end, you're now consulting for free instead of working on your product.
etc etc etc. I say go with him.
After learning everything he has to teach you, you will find that some things are still easy to do your way.
The reason he REMEMBERS where you don't is because he's thinking leanly about the actual feautre; he doesn't care what the code looks like (within reason) to support it.
> X says - Lets make those by copy-pasting - and later we will think about making it generic
... are pretty ill-informed. That just reeks of sloppy and lazy and not particularly concerned about his craft. If you're looking for a mentor I would think you'd want to align yourself with someone who is mindful of their craft, no?