Click here to Skip to main content
15,867,879 members

James R. Twine - Professional Profile



Summary

    Blog RSS
17,349
Author
6,365
Authority
4,463
Debator
5
Editor
26
Enquirer
135
Organiser
2,265
Participant
Programming since the age of 10, started professionally at the age of 17. Currently involved in both Client and Server side development on Win32 platforms for MC/HA/FT financial applications. Development experience with Win32, Win16, Linux and other flavors of Unix.

Extensive multithreaded development experience on Windows platforms using the Win32 SDK, and MFC.

Experience with HA/FT n-tiered Client/Server systems as well as GUI apps of varying complexity. Some experience with Game developement.

Having learned that the stuff you can barely get away with doing Client-side apps just does not cut it in the real "Server World", I am amazed how many 'professionals' cannot tell the difference between "works" and "correct" or try to (mis)use VB and/or MFC on server-side development projects, never considering that just because it RUNS, does not mean it runs WELL.

Lastly, I am also a collector of arcade games, and can perform repairs, conversions, etc. Search for my name, you will find me on lots of arcade-related documents and sites.

Sites of interest(?):
http://www.jrtwine.com
http://www.jrtwine.com/jtwine
http://www.signingtime.com
http://www.deletefxpfiles.com
http://www.checkfavorites.com
http://www.coinop.org
31 Dec 2007 CodeProject MVP 2008

Groups

Below is the list of groups in which the member is participating

United States United States
This member has not yet provided a Biography. Assume it's interesting and varied, and probably something to do with programming.
This is a Collaborative Group
This member has Member status in this group

41 members

Reputation

Weekly Data. Recent events may not appear immediately. For 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 frequencysilversilversilversilver
Bypass spam checks when posting contentsilversilversilversilversilversilvergoldSubEditor, Mentor, Protector, Editor
Store personal files in your account areaplatinumplatinumSubEditor, Editor
Have live hyperlinks in your profilebronzebronzebronzebronzebronzebronzesilverSubEditor, Protector, Editor
Have the ability to include a biography in your profilebronzebronzebronzebronzebronzebronzesilverSubEditor, Protector, Editor
Edit a Question in Q&AsilversilversilversilverYesSubEditor, Protector, Editor
Edit an Answer in Q&AsilversilversilversilverYesSubEditor, Protector, Editor
Delete a Question in Q&AYesSubEditor, Protector, Editor
Delete an Answer in Q&AYesSubEditor, Protector, Editor
Report an ArticlesilversilversilversilverSubEditor, Mentor, Protector, Editor
Approve/Disapprove a pending ArticlegoldgoldgoldgoldSubEditor, Mentor, Protector, Editor
Edit other members' articlesSubEditor, Protector, Editor
Create an article without requiring moderationplatinumSubEditor, Mentor, Protector, Editor
Approve/Disapprove a pending QuestionProtector
Approve/Disapprove a pending AnswerProtector
Report a forum messagesilversilverbronzeProtector, Editor
Approve/Disapprove a pending Forum MessageProtector
Have the ability to send direct emails to members in the forumsProtector
Create a new tagsilversilversilversilver
Modify a tagsilversilversilversilver

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


 
GeneralIncorrect Beliefs/Thoughts/Opinions Regarding Optimization Pin
James R. Twine22-Oct-07 4:48
James R. Twine22-Oct-07 4:48 
GeneralOptimization is not your enemy [modified] Pin
James R. Twine21-Sep-06 3:37
James R. Twine21-Sep-06 3:37 
   It is interesting to see how things work in the software development world these days.  Once someone mentions a need for efficient code or optimization, someone else always has to jump in with something like:

     "Today's compilers optimize enough"
     "The speed of today's computers make optimization unimportant"
     "[It] already works fast enough"
     "Premature Optimization!"

   But these responses raise other questions that should be addressed:

     Today's compilers optimize what enough?  They are pretty decent at things like expression optimization and making specific sections of code work better, but they generally do not help poor design or implementation.  For example - they cannot replace a heavyweight/slow approach with a simple/faster one, change normal file access into memory mapped file access, change heap memory to stack, or change a poll-spin-poll/poll-sleep-poll multithreaded implementation to an event-based one.  The day we all are using compilers that can automatically (and correctly!) do things like optimize a bubble-sort into a Quicksort is the day we can rely solely on the compiler for optimizations.

     The speed of what computer makes it run fast enough?  What is your minimum hardware requirement?  Note that a minimum requirement should not be the minimum required for the application to launch, but to actually perform useful work with a certain level of performance.  (A database implementation is worthless if it will launch on a PII with 256MB of RAM, but will not run so much as execute SELECT 1 without thrashing for 5 seconds.)  Developers tend to not develop on their target hardware.  We develop on high-end machines and see acceptable performance, but it becomes a dog when put on commodity hardware.  Oh, and what else is running on that machine at the same time?  Likely lots of other applications written by other developers that also think that they do not have to optimize because "the computer is fast enough."

     It works fast enough for who?  It may be fast enough for you, but unless you know exactly what every single user is going to be using your product for, and with what amounts of data (if applicable), you cannot be sure.  Generally, it is safer to err on the side of "it could be faster" than "it is fast enough."  "It could be faster" leaves open the possibility that there is a really big world out there, whereas "it is fast enough" is likely limited to the small area of knowledge you reside in.  Besides, when is the last time you heard a user complain: "Damn, your product just runs too fast - you guys need slow it down a bit.  I am getting too much done!"  Riiiight....

   Additionally, those initial responses fail to reflect human reality. Generally people do not realize how slow something is until they get something faster, or more to the point, they do not realize how bad something is until they get something better.  Walking was great until we started to ride animals.  Horses were great transportation until automobiles.  Driving was great until aircraft came along.  There is usually always a way to improve things, and most of the time, you are unaware of the benefits until you actually make the change.  But once you know something better is available, you tend to want it.

   Second, just about everything computer-related is rated by its performance.  Faster is better - we all want the workstation that can execute more instructions in less time (i.e. faster), the faster database (what is its TPS?), and ultimately the faster application.  We all expect our companies to provide us with large multicore/multi-CPU systems with 4GB of memory and the latest (fastest?) versions of software/applications.  If we want the fastest/best, why not our users?

   All things being equal, which would you want:

     -- To spend $45 on a game that plays on your system at 640x480x8 at 8FPS or one that plays at 1024x768x32 at full-motion speed? 

     -- To have to render a full-length movie using software that can render 1 frame every minute and a half, or one that can do it in 1 minute?

     -- To use a browser that can load and render Code Project pages in an average of 6 seconds each, or one that takes an average of 2 seconds each with no thrashing?

   Right.  That is what I thought.  Case closed.

   I think that part of the problem is that developers do not think like users.  Developers want the faster machine so that general development tasks go quicker, and a faster toolset for saving time on building larger projects, but seem to rarely think of doing anything to speed up the software that they are working on so that their users get the same benefit.  When your product's minimum requirements involve hardware less than 1 year old, you are likely doing something wrong, or you have a very specialized product and target audience.

   Another possible part of the problem with software optimization is that it takes one to know one.  Taking an example from the paper Unskilled and Unaware of It[^] (from the Journal of Personality and Social Psychology), you have to know proper English grammar in order to (1) produce proper English grammar, and (2) be able to recognize proper English grammar.  If you do not know English, you cannot tell if another English sentence is grammatically correct or not.  And more to the point, if you have poor English skills, you may be unable to spot a proper English sentence when you see it.

   This same thing happens with knowledge of optimization and recognition of things like poor/inefficient coding techniques or poor/inefficient implementations - if you do not know that your approach/implementation is poor and/or inefficient, then you are unlikely to recognize a superior approach/implementation when one is presented to you.  Throw in the fact that developers tend to be pretty proud of their code and do not want to hear that it might be less than optimal.

   If you do not know about the different kinds of optimization that may (or may not) be required, you cannot recognize that you may have a need for it.  This lack of skill often manifests itself in a resistive attitude, which usually starts with at least one of the three statements mentioned above.  People that have more of an academic than practical background also seem to fall victim to the belief that optimization is not important, usually citing the same above reasons.

   Also, beware when someone says the words premature optimization.  This is often the response from someone with a lack of real-world experience (or at least less than you).  Look at it this way...  If you have an application that grinds to a halt each time the user performs a sort on something, and you have a look at the code and see a bubble sort implementation being used to sort 1000+ random items, you do not need to profile the application just to state that the bubble sort is causing a performance problem.

   Just like how you learned in school that a bubble sort has poor performance and Quicksort has better performance, you also learn through years of experience and wisdom that this way of doing it is far less optimal than that way of doing it.  Recent graduates seem to have the most trouble understanding the value of experience over schooling, and it seems that the higher the degree, the longer it takes to gain that understanding and to respect it.

   A final note - if someone comments that your implementation is poor, never reply with something stupid like "Well, if you cannot do anything better, you should not say anything at all!"  That is the #1 indicator that you lack the skills to understand your own limitations and thus recognize a better approach.

   And as an example of how stupid saying something like that is, if the automatic transmission in your new car started slipping, what would you think if when you called your dealer's service department about it, they responded by saying that since you lack the ability to build a better transmission you should not be commenting on one you have.  Stupid, right?  You do not have to know how to build a better mousetrap to know that the one you have is working poorly.  The same goes for your users.

   Peace!


-- modified at 8:29 Monday 12th March, 2007

-=- James
If you think it costs a lot to do it right, just wait until you find out how much it costs to do it wrong!
Avoid driving a vehicle taller than you and remember that Professional Driver on Closed Course does not mean your Dumb Ass on a Public Road!
DeleteFXPFiles & CheckFavorites
(Please rate this post!)

AnswerPointless Code Examples Pin
James R. Twine21-Mar-06 6:12
James R. Twine21-Mar-06 6:12 
QuestionC-Hash, C-Pound, C-WHAT? Pin
James R. Twine9-May-05 0:53
James R. Twine9-May-05 0:53 
GeneralRe: C-Hash, C-Pound, C-WHAT? Pin
Duncan Edwards Jones27-Oct-05 2:42
professionalDuncan Edwards Jones27-Oct-05 2:42 
GeneralRe: C-Hash, C-Pound, C-WHAT? Pin
James R. Twine31-Oct-05 14:32
James R. Twine31-Oct-05 14:32 
GeneralRe: C-Hash, C-Pound, C-WHAT? Pin
Jeremy Falcon20-Mar-06 8:01
professionalJeremy Falcon20-Mar-06 8:01 
JokeRe: C-Hash, C-Pound, C-WHAT? Pin
James R. Twine20-Mar-06 14:11
James R. Twine20-Mar-06 14:11 
AnswerNUL is not NULL...! [modified] Pin
James R. Twine24-Jan-05 4:24
James R. Twine24-Jan-05 4:24 
QuestionRe: NUL is not NULL...! Pin
Rajesh R Subramanian30-Jan-08 7:32
professionalRajesh R Subramanian30-Jan-08 7:32 
GeneralWhadda Think...? [modified] Pin
James R. Twine8-Mar-04 10:23
James R. Twine8-Mar-04 10:23 
GeneralRe: Whadda Think...? Pin
Eytukan28-Feb-07 6:20
Eytukan28-Feb-07 6:20 
GeneralRe: Whadda Think...? Pin
James R. Twine28-Feb-07 17:12
James R. Twine28-Feb-07 17:12 
GeneralRe: Whadda Think...? Pin
Eytukan1-Mar-07 4:15
Eytukan1-Mar-07 4:15 
GeneralRe: Whadda Think...? Pin
James R. Twine2-Mar-07 2:30
James R. Twine2-Mar-07 2:30 
GeneralRe: Whadda Think...? Pin
Eytukan4-Mar-07 15:50
Eytukan4-Mar-07 15:50 
GeneralRe: Whadda Think...? Pin
Rajesh R Subramanian30-Jan-08 7:28
professionalRajesh R Subramanian30-Jan-08 7:28 

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.