Click here to Skip to main content
13,146,742 members (80,078 online)

Sergey Alexandrovich Kryukov - Professional Profile





Summary

    Blog RSS
46,016
Author
810,346
Authority
10,225
Debator
24,095
Editor
515
Enquirer
197,294
Organiser
74,519
Participant
No Biography provided
  • 15 Sep 2017: Best C# Article of August 2017 - Second Prize
  • 19 May 2017: Best C# Article of April 2017 - Second Prize
  • 21 Apr 2017: Best C++ Article of March 2017 - First Prize
  • 17 Mar 2017: Best C++ Article of February 2017 - First Prize
  • 31 Dec 2015: CodeProject MVP 2016
  • 31 Dec 2014: CodeProject MVP 2015
  • 31 Dec 2013: CodeProject MVP 2014
  • 31 Dec 2012: CodeProject MVP 2013
  • 31 Dec 2011: CodeProject MVP 2012

Articles 32 (Legend)
Tech Blogs 0
Messages 1,913 (Master)
Q&A Questions 1
Q&A Answers 19,604
Tips/Tricks 10
Reference 0
Comments 83,407

Reputation

For more information on Reputation please see the FAQ.

Privileges

Members need to achieve at least one of the given member levels in the given reputation categories in order to perform a given action. For example, to store personal files in your account area you will need to achieve Platinum level in either the Author or Authority category. The "If Owner" column means that owners of an item automatically have the privilege. The member types column lists member types who gain the privilege regardless of their reputation level.

ActionAuthorAuthorityDebatorEditorEnquirerOrganiserParticipantIf OwnerMember Types
Have no restrictions on voting frequencysilversilversilversilverAdmin
Bypass spam checks when posting contentsilversilversilversilversilversilversilverSitebuilder, Subeditor, Mentor, Protector, Editor, Staff, Admin
Store personal files in your account areaplatinumplatinumSitebuilder, Subeditor, Supporter, Editor, Staff
Have live hyperlinks in your profilebronzebronzebronzebronzebronzebronzesilverSubeditor, Protector, Editor, Staff, Admin
Have the ability to include a biography in your profilebronzebronzebronzebronzebronzebronzesilverSubeditor, Protector, Editor, Staff, Admin
Edit a Question in Q&AsilversilversilversilverYesSubeditor, Protector, Editor, Admin
Edit an Answer in Q&AsilversilversilversilverYesSubeditor, Protector, Editor, Admin
Delete a Question in Q&AYesSubeditor, Protector, Editor, Admin
Delete an Answer in Q&AYesSubeditor, Protector, Editor, Admin
Report an ArticlesilversilversilversilverSubeditor, Mentor, Protector, Editor, Staff, Admin
Approve/Disapprove a pending ArticlegoldgoldgoldgoldSubeditor, Mentor, Protector, Editor, Staff, Admin
Edit other members' articlesSubeditor, Protector, Editor, Admin
Create an article without requiring moderationplatinumSubeditor, Mentor, Protector, Editor, Staff, Admin
Approve/Disapprove a pending QuestionProtector, Admin
Approve/Disapprove a pending AnswerProtector, Admin
Report a forum messagesilversilverbronzeProtector, Editor, Admin
Approve/Disapprove a pending Forum MessageProtector, Admin
Create a new tagsilversilversilversilverAdmin
Modify a tagsilversilversilversilverAdmin

Actions with a green tick can be performed by this member.


 
GeneralWhere to Start? Pin
Sergey Alexandrovich Kryukov10-May-16 13:46
mvpSergey Alexandrovich Kryukov10-May-16 13:46 
I guess it's time to write on yet another popular kind question from many naive inquirers' of the Quick Questions & Answers forum. The question is reduced to the following schema:
People tell as what they want to achieve, and, instead of a question, we often see the statement:

"I don't know where to start."
When the section "What I have tried" was introduced, people started to write "I don't know where to start" in this section. Unfortunately, seemingly good idea of this section, as an attempt to stimulate the inquirers to write what they try, has failed. This is really sad.
This is my usual comment on such questions:

Unfortunately, this question is not very productive. If you get some answer, your next question probably will be "how to continue?" It is not really important where you start; you can start with one of many different steps. We don't know your current level of knowledge, so it's hard to figure out what kind of help you may need. If you ask such question, it's hard to be sure that you really will be able to use the answer. Not many people like to waste time.
I still think it's a good comment in response to a particular forum question. However, for a blog entry, I have a good deal of things to consider, and that can be applied to many similar questions, and not only the questions of the "I don't know where to start" kind. How to organize and prioritize the work when there is a lot of unknown matter? This is a different story, and some good advice can be useful. How I would deal with such situation? As nearly all developers, I face such situation from time to time, but I have pretty clear vision on how to determine what should be done first and what next. Still, there is usually a lot of possibility, but some general principles can be used. Let's see…

The Principle of the Drunkard's Search



If you lost your keys, search them under the streetlight, because "this is where the light is".
Even though this is considered as an "observational bias", often used for mocking of seemingly stupid behavior, but, after all, is not stupid at all. No wonder that this approach is widely used in scientific research, in particular, in physics.

Why it can be considered a reasonably good strategy in engineering, at certain points?
First of all, this is good because it involves minimal risk of loss in case of failed project. You start the project with something most obvious. You can guarantee the success on this part, so you will have something which works almost for free. If your project fails because you face a brick wall, you still can reuse this trivial part of work for some other project, and you collect some experience. More importantly, when you have some trivial part of work operational, it can give you a platform to get your breath, look around and… see the rest of the problems more clearly. If this trivial part of work requires modification, it will be easy — the work is trivial. Even if you cannot reuse this work at all, it won't be too regretful, because only a minor portion of development time is lost. Not too bad.
Now, I'll describe the possible strategic approach; and this is my own approach, near-opposite to the previously described one.

Do the Hardest Part First


Why? Let's see. It's very possible that you are pretty much sure how to make the whole project, except some less than critical detail, and except some really difficult part, one or couple of them. Usually, the main goal of the project is related exactly to this hard part; and you are not sure if it's feasible at all or not. Apparently, if you leave the hard problem for later time, the whole project can be lost. You really need to make sure you can do the hardest part, so no other works make sense before you make it sure. Prototype the hardest part, and do it as fast as possible. Why? This is because it defines the success or failure of the whole project. Don't be distracted too much by the detail of secondary importance; you can do it later. While in the first, "drunkard's search" approach you should be reasonably accurate, because you may want to reuse this trivial part of work, the "hardest-first" approach can be developed in a pretty dirty way at first. However, it should not be too dirty; it should be thorough enough to eliminate mistakes. The development should be clear enough, because, in this part, mistakes cost too much. You just should not waste time for polishing the code; you can always do it later.
But one can wonder, how can I offer such near-opposite strategies at the same time? I hope the answer is simple:

Combine Different Strategies


You really need to look at the goals of the project are review them on each step. You make some strategic step, plan some works, complete them to certain reasonable extent, and then look again. Here, we come to another key principle:

Get Ready to Modify Decisions at Any Time


It's became a common view during a couple of past decades: development should be iterative and conducted in some repeated cycles. Some could see that it contradicts to the idea of accurate well-planned systematic approach. In reality, the role of this principle is very different: it simply makes the idea of the accurate well-planned systematic approach realistic. But now, the question is: if the strategy should be reviewed pretty often and the decision on next step/cycle can be modified on each iteration, what could be the basis of such decisions? My answer is another principle:

Prototype Everything


There is a really evil misconception: prototyping is a waste of time. Usually, it comes not from engineers, but some managers, such as project managers (it becomes a real disaster if such people don't have engineering qualification). All reasonable and more or less experienced engineers clearly understand: the situation is directly opposite: prototypes save a hell of development time, and reduce development risks greatly. They just should not be polished too well. The other point is less obvious and poorly understood even by engineers: artifacts of prototyping should be stored in the Revision Control System forever, along with the main product.

—SA

Sergey A Kryukov


modified 1-Jun-16 3:20am.

GeneralWhat is Good Software Architecture? Pin
Sergey Alexandrovich Kryukov9-Nov-15 4:31
mvpSergey Alexandrovich Kryukov9-Nov-15 4:31 
GeneralBroken recursion? Pin
Sergey Alexandrovich Kryukov12-Oct-15 16:52
mvpSergey Alexandrovich Kryukov12-Oct-15 16:52 
GeneralUnhappy Inquirer or Is the Abuse the Main Goal of Programming? Pin
Sergey Alexandrovich Kryukov3-Jun-15 16:17
mvpSergey Alexandrovich Kryukov3-Jun-15 16:17 
GeneralRe: Unhappy Inquirer or Is the Abuse the Main Purpose of Programming? Pin
Maciej Los4-Aug-15 3:45
protectorMaciej Los4-Aug-15 3:45 
GeneralRe: Unhappy Inquirer or Is the Abuse the Main Purpose of Programming? Pin
Stefan_Lang15-Sep-15 3:56
memberStefan_Lang15-Sep-15 3:56 
GeneralRe: Unhappy Inquirer or Is the Abuse the Main Purpose of Programming? Pin
Sergey Alexandrovich Kryukov15-Sep-15 5:40
mvpSergey Alexandrovich Kryukov15-Sep-15 5:40 
GeneralArtemy Lebedev and his advice. How you can get a great topic for a project and prove yourself? Pin
Sergey Alexandrovich Kryukov3-Jun-15 15:42
mvpSergey Alexandrovich Kryukov3-Jun-15 15:42 
GeneralFeeding Apple or Why Don't We Answer Some Questions Pin
Sergey Alexandrovich Kryukov3-Jun-15 14:50
mvpSergey Alexandrovich Kryukov3-Jun-15 14:50 
GeneralStarting my notes on Questions & Answers Pin
Sergey Alexandrovich Kryukov3-Jun-15 14:41
mvpSergey Alexandrovich Kryukov3-Jun-15 14:41 

General General    News News    Suggestion Suggestion    Question Question    Bug Bug    Answer Answer    Joke Joke    Praise Praise    Rant Rant    Admin Admin   

Use Ctrl+Left/Right to switch messages, Ctrl+Up/Down to switch threads, Ctrl+Shift+Left/Right to switch pages.


Advertise | Privacy |
Web02 | 2.8.170915.1 | Last Updated 23 Sep 2017
Copyright © CodeProject, 1999-2017
All Rights Reserved. Terms of Service
Layout: fixed | fluid